这里的事情是这样的(长篇大论,但我有一点意见)
我有一个带有按钮的菜单,如下所示:
*******
***B***
*******
当你悬停它时会扩展
*************
***Button****
*************
现在,当屏幕用于移动时,不再有六边形,它们像普通按钮一样堆叠,显示完整的文字而不必悬停阅读。
我的标记如下:
<a href="#" class="btn">S<span class="comptxt">ervicios</span></a>
<a href="#" class="btn">C<span class="comptxt">ontacto</span></a>
<a href="#" class="btn">F<span class="comptxt">aq</span></a>
<a href="#" class="btn">B<span class="comptxt">log</span></a>
我正在使用jQuery在hover和css上显示和隐藏span标签以处理锚标签的宽度。
$('a.btn').hover(function() {
$(this).children('span').fadeIn(500);
$('img').css('opacity', 0.5);
}, function() {
$(this).children('span').fadeOut(200);
$('img').css('opacity', 1);
});
当悬停时,悬停时淡出淡出。 但我把这个javascript设置为IF条件,如果屏幕调整为移动设备(我使用的是500px及以下的移动设备),这段代码不应该运行,这里是if条件:
$(window).resize(function() {
if ($(window).width() < '501') {
$('a.btn').hover(function() {
$(this).children('span');
$('img').css('opacity', 0.5);
}, function() {
$(this).children('span');
$('img').css('opacity', 1);
});
};
if ($(window).width() > '500') {
$('a.btn').hover(function() {
console.log($(window).width());
$(this).children('span').fadeIn(500);
$('img').css('opacity', 0.5);
}, function() {
//this part of the code runs even if the window is below 500
$(this).children('span').fadeOut(200);
$('img').css('opacity', 1);
});
};
});
令我感到不安的是条件没有达到并且代码仍在运行。 问题是,当按钮正常并且在调整大小后将鼠标悬停在它们上方时,文本会淡出 其他的事情:当你加载页面并且屏幕低于500时,它可以正常工作,不会消失。当您调整大小超过500并将调整大小调低到500以下时会出现问题,然后再次发生淡出。
答案 0 :(得分:0)
在resize事件中,您永远不会从窗口大小时删除上一个事件处理程序。您可以使用off()
:
$(window).resize(function() {
if ($(window).width() < '501') {
$('a.btn').off('hover').hover(function() {
// rest of your code...
});
};
if ($(window).width() > '500') {
$('a.btn').off('hover').hover(function() {
// rest of your code...
});
};
});
更好的解决方案可能是在hover
处理程序本身内检查窗口的大小,因为窗口调整大小的每个像素的分离/附加事件最终会变得非常慢。试试这个:
$(function() {
$('a.btn').hover(function() {
var opacity = $(window).width() < 501 ? 0.5 : 1;
$('img').css('opacity', opacity);
}, function() {
var opacity = $(window).width() < 501 ? 1 : 0.5;
$('img').css('opacity', opacity);
});
});
答案 1 :(得分:0)
.hover()
和其他函数一样, .click()
与jQuery相加。
每次调整窗口时,都会在悬停时绑定附加功能。
我的意思是,如果窗口的大小调整为200像素,则将该函数绑定200次,实际上它将在悬停时执行200次。
扩展窗口时也是如此:悬停功能将继续保持联系。所以,在悬停时,200&#34;小屏幕&#34;功能将被执行,200&#34;大屏幕&#34;功能将被执行。这是一个糟糕的设计。
至少,你必须在应用新的之前取消绑定hover():
$('a.btn').unbind('mouseover mouseout').hover(
答案 2 :(得分:0)
您的代码无法运行,因为您将其放在$(window).resize中。它仅在屏幕调整大小时运行,但永远不会悬停。