【发布时间】:2018-01-06 22:13:44
【问题描述】:
使用 fotorama,我有一个关于范围的问题。我可以在加载 fotorama html 实例后调用 api(api 调用必须放在 html fotorama div 下方才能工作,如下所示)但是当我将该api调用放入onclick函数中,控制台给出fotorama不是函数的错误。这是有效的代码(替换 fotorama div 中的图像)-
<div class="fotorama">
<img src="img1.jpg">
<img src="img2.jpg">
<img src="img3.jpg">
<img src="img4.jpg">
</div>
<script language="JavaScript" type="text/javascript">
// 1. Initialize fotorama manually.
var $fotoramaDiv = $('.fotorama').fotorama();
// 2. Get the API object.
var fotorama = $fotoramaDiv.data('fotorama');
fotorama.load([
{img: 'img1.jpg', thumb: '1_thumb.jpg'},
{img: 'img1.jpg', thumb: '2_thumb.jpg'},
{img: 'img1.jpg', thumb: '3_thumb.jpg'}
]);
// 3. Inspect it in console.
console.log(fotorama);
</script>
这就是我要开始工作的内容,同样的 fotorama api 调用,但在 onclick 函数中-
$( ".button" ).click(function() {
// 1. Initialize fotorama manually.
var $fotoramaDiv = $('.fotorama').fotorama();
// 2. Get the API object.
var fotorama = $fotoramaDiv.data('fotorama');
fotorama.load([
{img: 'img1.jpg', thumb: '1_thumb.jpg'},
{img: 'img1.jpg', thumb: '2_thumb.jpg'},
{img: 'img1.jpg', thumb: '3_thumb.jpg'}
]);
// 3. Inspect it in console.
console.log(fotorama);
});
我认为这是范围问题。有谁知道如何让它工作?
感谢您的宝贵时间 :)
【问题讨论】:
-
可能不是您的实际问题...但是我预见到这个想法的一个问题是每次单击都会实例化fotorama...最好使用
$( ".button" ).one("click", function() {,其中.one()只会触发一次。 ;) -
感谢@LouysPatriceBessette,但问题仍然存在。 fotorama 不是已经被实例化了吗?
-
我不明白你的问题。当您调用
$(element).fotorama();时会发生实例化。如果你在同一个元素上调用它两次或多次,就像任何插件一样......会出现问题。 -
现在检查是否加载了
fotorama.js。我看不出在加载或事件之后实例化有任何区别。
标签: javascript jquery scope fotorama