我正在使用hotkeys plugin來爲關鍵事件添加處理程序。 我做了一個圖像滑塊,在那裏我通過雜誌的封面圖像。 我首先製作了一個腳本,用戶可以通過點擊導航按鈕瀏覽雜誌的封面。Javascript-keyup event firing multiple
$(document).ready(function() {
imagesIndex = 0,
nextImage = 0,
loadedImages = [];
if (typeof images !== 'undefined') {
preload();
$('#forward').click(forwardClick);
$('#back').click(backClick);
}
});
var preload = function() {
for (i = 0; i < 4; i++) {
if (nextImage < images.length) {
var img = new Image();
img.src = '/imagecache/cover/' + images[nextImage];
loadedImages[nextImage] = img;
++nextImage;
}
}
}
var forwardClick = function() {
imagesIndex++;
preload();
$('#back').removeClass('not-allowed');
if (imagesIndex > (loadedImages.length - 1)) {
imagesIndex = loadedImages.length - 1;
}
if (imagesIndex > (loadedImages.length - 2)) {
$('#forward').addClass('not-allowed');
}
$('#cover-image').attr({"src" : loadedImages[imagesIndex].src, "alt" : name});
}
var backClick = function() {
imagesIndex--;
$('#forward').removeClass('not-allowed');
if (imagesIndex < 0) {
imagesIndex = 0;
}
if (imagesIndex < 1) {
$('#back').addClass('not-allowed');
}
$('#cover-image').attr({"src" : loadedImages[imagesIndex].src, "alt" : name});
}
module.exports.preload = preload;
module.exports.forward = forwardClick;
module.exports.back = backClick;
這工作正常有,我選擇的雜誌,其中當用戶點擊一個,獲取滾動到該雜誌的詳細信息,用戶點擊了創建一個節。每當用戶點擊某本雜誌時,我都會動態更改該部分,並用點擊的雜誌更新詳細信息。用戶可以通過點擊導航按鈕瀏覽該雜誌的封面。 所以,每次用戶點擊了一些新的雜誌,我調用這個函數:
var showMagazineDetail = function showMagazineDetail(id, slug, name, summary, issueImage, magazineImage, visiolinkPrefix, page){
images = [];
nextImage = 0;
imagesIndex = 0;
loadedImages = [];
...rest of the code
在這裏,我清空images
和loadedImages
陣列。 所以,這部分工作正常。我遇到的問題是關鍵事件。 我已經制作了這個腳本,在那裏檢查該部分是否在視口中,然後啓用通過雜誌封面。
var issueImages = require('./issue-images');
var forward = issueImages.forward;
var back = issueImages.back;
$(document).ready(function() {
var coverImage = $('.magazine-hero');
window.onscroll = function() {
var coverVisible = isElementInViewport(coverImage);
if (coverVisible) {
$(document).on('keyup', null, 'right', forward);
$(document).on('keyup', null, 'left', back);
}
};
});
function isElementInViewport(el) {
var rect = el[0].getBoundingClientRect();
return rect.bottom > rect.height*0.8 &&
rect.top < ((window.innerHeight*0.7) || (document.documentElement.clientHeight*0.7)) &&
rect.right > 0 &&
rect.left < (window.innerWidth || document.documentElement.clientWidth);
}
的問題是,當我按下鍵進入其立即轉到該雜誌的封面最後的下蓋。 當我在控制檯檢查imagesIndex
,我可以看到,按right key arrow
的index
變爲12(這是該雜誌的封面最後)則會立即:
1問題,images.js? 828c:28 2 issue-images.js?828c:28 3 issue-images.js?828c:28 4 issue-images.js?828c:28 5 issue-images.js?828c:28 6問題圖像。 js?828c:28 7 issue-images.js?828c:28 8 issue-images.js?828c:28 9 issue-images.js?828c:28 10 issue-images.js?828c:28 11 issue -images.js?828c:28 12
我怎樣才能防止這種情況,只有已經呼籲功能每次關鍵事件發生時都會提供?由於我只是短時間按下按鈕,而沒有按住按鈕。 – Leff
通過使用keyup事件而不是keydown。 –
這與keyup事件是一樣的。我也嘗試了按鍵,但是這些功能甚至沒有被調用。 – Leff