我正在處理一個導航插件,該插件需要一個列表並將每個項目放在它的div上,這會像按鈕一樣工作。它類似於標準的下拉菜單。jquery mouseOver/mouseEnter發生時不應該
我的問題來自函數setFocus()。這將採用選定的div並添加懸停/ mouseOver/mouseEnter功能。
我列出了三個,因爲我已經嘗試了所有三個都與他們同樣的問題。如果您在該功能中注意到,我現在將它設置爲在鼠標進入div時使用文本'over'進行提醒。
由於某些原因,無論遊標是否輸入了div,它都會運行。加載頁面時,即使光標不在窗口空間內,即使您在div上滾動,警報也會觸發,就好像光標已進入div並且mouseLeave從不響應。有沒有其他人有類似的問題?我很難過。
var divCode = String();
//grab each list item and put it in its own div
$('#nav li').each(function() {
divCode += "<div>" + $(this).html() + "</div> ";
});
//get rid of the list and replace it with a plane ol' div
//then fill that it with our new "button" divs
$('#nav').replaceWith('<div id="newNav"> </div)');
$('#newNav').html(divCode);
//add some functionality to the divs
$('#newNav div').addClass('fader')
.each(function() {
if ($(this).css('position')!='relative' || $(this).css('position')!='absolute'){
$(this).css('position','relative');
}
})
.css('cursor', 'pointer')
.click(function() {
switchDivs($(this));
});
//set the min-height of the nav div
$('#newNav').css('minHeight', $('#newNav').height());
setFocus($('#newNav div').first());
$('.fader').hide();
function fadeOn(speed) {
$('.fader').fadeTo(speed, 100);
alert('over');
}
function fadeWipe(speed) {
$('.fader').fadeTo(speed, 0);
alert('out');
}
function setFocus(obj) {
obj.removeClass('fader')
.addClass('focus')
.css('backgroundColor', 'red')
.hover(fadeOn(500),fadeWipe(500));
}
function switchDivs(obj2) { //obj2 is the object to become the focus div
var obj1 = $('.focus');
//if the two objects are the same, quit
if (obj1.text() == obj2.text()) {
return;
}
var oneOff = obj1.offset();
var oneDirectionY = "-"; //lol...one direction
var twoOff = obj2.offset();
var twoDirectionY = "-";
var movementTotalY = 0;
if (oneOff.top <= twoOff.top) {
oneDirectionY = "+";
movementTotalY = twoOff.top - oneOff.top;
} else {
twoDirectionY = "+";
movementTotalY = oneOff.top - twoOff.top;
}
var oneDirectionX = "-"; //lol...one direction
var twoDirectionX = "-";
var movementTotalX = 0;
if (oneOff.left <= twoOff.left) {
oneDirectionX = "+";
movementTotalX = twoOff.left - oneOff.left;
} else {
twoDirectionX = "+";
movementTotalX = oneOff.left - twoOff.left;
}
obj1.animate({ top : oneDirectionY+"="+movementTotalY+"px",
left : oneDirectionX+"="+movementTotalX+"px"
},1500);
obj2.animate({ top : twoDirectionY+"="+movementTotalY+"px",
left : twoDirectionX+"="+movementTotalX+"px"
},1500);
//remove focus from object 1
obj1.removeClass('focus')
.addClass('fader');
//add focus to object 2
obj2.removeClass('fader')
.addClass('focus');
}
});
提示@Zane_Adickes - 如果你沒有工具來自動解析您的JS,我試圖在[的jsfiddle]粘貼代碼(http://jsfiddle.net/),並確保在其上運行的JSLint和讓它運行沒有錯誤。發現像分號中的setFocus功能.mouseLeave() – leon
@ Zane_Adickes-之前的一些JS錯誤,現在的代碼編輯和錯誤警報()已被刪除,它的行爲您預期的方式嗎? – leon
不,我再次更新並在頂部添加了一個JSFiddle。您會看到在加載時發出警報,就像懸停檢測到mouseOver和mouseOut一樣。仍然難倒 –