单击 Colorbox 中当前照片的左半部分显示上一张照片
Show previous photo on click in the left half of the current photo in Colorbox
在 Colorbox 1.6.0 中,默认情况下,单击显示的照片意味着显示下一张可用的照片。
当用户点击当前照片的左半部分时,我可以自定义 Colorbox 以显示上一张照片吗?
我知道如何确定鼠标点击一般发生在 div 的左半边还是右半边,所以我考虑实现自己的点击处理程序。单击处理程序将调用 prev() 或 next() public 方法。不过,我不知道将我的点击处理程序放在哪里,因为 Colorbox 默认行为优先。
HTML中的照片:
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="First"></a>
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="Second"></a>
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="Third"></a>
颜色框初始化:
$(".my-colorbox").colorbox({
rel: "gallery-colorbox",
photo: true,
loop: false,
transition: "none",
maxWidth: "90%",
maxHeight: "90%",
...internationalization...
});
点击处理程序 - 这个想法来自这个问题 - Determining if mouse click happened in left or right half of DIV :
$("#cboxLoadedContent").click(function (e) {
var pWidth = $(this).innerWidth();
var pOffset = $(this).offset();
var x = e.pageX - pOffset.left;
if (pWidth / 2 > x)
$.colorbox.prev();
else
$.colorbox.next();
});
问题是 #cboxLoadedContent
不是绑定处理程序的正确位置,因为从未调用过处理程序。
我相信这是优先的代码(Colorbox - 函数 load
)。
...
photo = settings.get('createImg');
...
if ($related[1] && (settings.get('loop') || $related[index + 1])) {
photo.style.cursor = 'pointer';
photo.onclick = function () {
publicMethod.next();
};
}
查看演示颜色框,我看到当显示图像时,最上面的 dom 元素(因此将在点击事件中被点击的元素)是:
<img class="cboxPhoto" src="somePicture.jpg">
所以我会将事件处理程序附加到这种特定类型的 <img>
。
$(".my-colorbox").colorbox({
/* your options */
onComplete: function() {
$(".cboxPhoto").removeAttr("onclick"); //stop the default
}
});
$(document).on("click", ".cboxPhoto", function(e) {
/* your left/right handler code here */
})
通过添加 .cboxPhoto
参数,我过滤了文档上发生的点击事件,并表示我只对与此选择器匹配的元素感兴趣。
这比我需要的要难logged an issue。
更新:
问题已得到回复,如果您使用 v1.6.1,则 onComplete
回调将是:
function() {
$(".cboxPhoto").off("click.cbox");
}
在 Colorbox 1.6.0 中,默认情况下,单击显示的照片意味着显示下一张可用的照片。
当用户点击当前照片的左半部分时,我可以自定义 Colorbox 以显示上一张照片吗?
我知道如何确定鼠标点击一般发生在 div 的左半边还是右半边,所以我考虑实现自己的点击处理程序。单击处理程序将调用 prev() 或 next() public 方法。不过,我不知道将我的点击处理程序放在哪里,因为 Colorbox 默认行为优先。
HTML中的照片:
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="First"></a>
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="Second"></a>
<a class="my-colorbox" href="..." rel="gallery-colorbox" title="Third"></a>
颜色框初始化:
$(".my-colorbox").colorbox({
rel: "gallery-colorbox",
photo: true,
loop: false,
transition: "none",
maxWidth: "90%",
maxHeight: "90%",
...internationalization...
});
点击处理程序 - 这个想法来自这个问题 - Determining if mouse click happened in left or right half of DIV :
$("#cboxLoadedContent").click(function (e) {
var pWidth = $(this).innerWidth();
var pOffset = $(this).offset();
var x = e.pageX - pOffset.left;
if (pWidth / 2 > x)
$.colorbox.prev();
else
$.colorbox.next();
});
问题是 #cboxLoadedContent
不是绑定处理程序的正确位置,因为从未调用过处理程序。
我相信这是优先的代码(Colorbox - 函数 load
)。
...
photo = settings.get('createImg');
...
if ($related[1] && (settings.get('loop') || $related[index + 1])) {
photo.style.cursor = 'pointer';
photo.onclick = function () {
publicMethod.next();
};
}
查看演示颜色框,我看到当显示图像时,最上面的 dom 元素(因此将在点击事件中被点击的元素)是:
<img class="cboxPhoto" src="somePicture.jpg">
所以我会将事件处理程序附加到这种特定类型的 <img>
。
$(".my-colorbox").colorbox({
/* your options */
onComplete: function() {
$(".cboxPhoto").removeAttr("onclick"); //stop the default
}
});
$(document).on("click", ".cboxPhoto", function(e) {
/* your left/right handler code here */
})
通过添加 .cboxPhoto
参数,我过滤了文档上发生的点击事件,并表示我只对与此选择器匹配的元素感兴趣。
这比我需要的要难logged an issue。
更新:
问题已得到回复,如果您使用 v1.6.1,则 onComplete
回调将是:
function() {
$(".cboxPhoto").off("click.cbox");
}