我正在建立一个图库并且我遇到了keydown
事件的错误(奇怪的是仅在Windows上,而不是在使用相同浏览器的Mac上)。
当我点击拇指时,幻灯片打开并且图像已准备就绪。我也允许图像通过箭头键滑动。奇怪的是,如果我关闭幻灯片div并重新打开它(没有任何页面刷新),如果我尝试使用键盘箭头导航它将跳过两到两个图像(1-3-5) -7等)。 "跳过号码"我连续多次递增并再次打开幻灯片。
我用来通过键盘键浏览图像的功能与"屏幕箭头"相同。点击,但在第二种情况下,一切都很好。如果keydown事件有缓存或类似的事情就好了。
这是整个imgBrowsing()
函数:
var imgBrowsing = function () {
function prevNext(move) {
/*
* @move { string: "prev" / "next" }
*/
var prevCurrNext_obj = {
'venus-img-wrap-prev': $('.venus-img-wrap-prev'),
'venus-img-wrap-current': $('.venus-img-wrap-current'),
'venus-img-wrap-next': $('.venus-img-wrap-next')
};
if (move == "prev") {
/* ***** Current img id re-definition ***** */
(current_img_id >= 1)
? --current_img_id
: current_img_id = images_length - 1;
/* ***** PREV-CURRENT-NEXT classes re-attribution ***** */
$.each(prevCurrNext_obj, function (class_name, jQuery_obj) {
var b;
(jQuery_obj.prev(venusImgWrap).length)
? b = jQuery_obj.prev(venusImgWrap)
: b = $(venusImgWrap).last();
b.addClass(class_name);
jQuery_obj.removeClass(class_name);
});
} else if (move == "next") {
/* ***** Current img id re-definition ***** */
(current_img_id + 1 < images_length)
? ++current_img_id
: current_img_id = 0; // = the first element inside the array-object 'images'
/* ***** PREV-CURRENT-NEXT classes re-attribution ***** */
$.each(prevCurrNext_obj, function (class_name, jQuery_obj) {
var b;
(jQuery_obj.next(venusImgWrap).length)
? b = jQuery_obj.next(venusImgWrap)
: b = $(venusImgWrap).first();
b.addClass(class_name);
jQuery_obj.removeClass(class_name);
});
}
venusDivFilling();
}
/* ***** KEYDOWN pression event ***** */
$(document).on("keydown", function (e) {
switch (e.which) {
case 39: // right
prevNext("next");
break;
case 37: // left
prevNext("prev");
break;
case 27: // ESC
venusDivRemove();
break;
default: return; // exits this handler for other keys
}
e.preventDefault(); // prevents the default action (scroll / move caret)
});
/* ***** ARROWS click event ***** */
$(venusImgBrowse).click(function () {
prevNext($(this).data('venus-direction'));
});
/* ***** SWIPE event ***** */
};