人们!
这是我第一次来这里问东西,到目前为止,当我遇到问题时,我都能在这里找到一个很好的答案。所以,首先,感谢这个了不起的社区!
现在让我们来解决问题:
我正在做一个响应式菜单来检查window.resize事件,当它适合最小浏览器宽度时,允许按钮的单击功能。如果浏览器宽度较大,则单击功能未绑定。我需要这样做,因为与移动版本上的按钮相同的元素是桌面版本上的视觉元素。
问题是,使用我现在拥有的代码,当页面加载时,点击功能可以正常工作。但是,如果我调整浏览器大小并再次单击元素,它会触发多次状态,有时会留下未触发功能的印象。而且,如果我再次调整浏览器的大小,它触发的点击功能比我上次点击的次数要多。真烦人。
为了帮助理解正在发生的事情,我做了一个简单的例子。这是简单的代码(只是为了检查点击功能问题):
HTML:
<ul>
<li><span class="sub-toggle">Testing 01</span></li>
<li><span class="sub-toggle">Testing 02</span></li>
<li><span class="sub-toggle">Testing 03</span></li>
</ul>
CSS:
.sub-toggle{
display:block;
padding: 20px;
}
.sub-toggle.active{
background-color: #ffcc00;
color: #fff;
}
Javascript(jQuery):
jQuery(function($){
var i = 1;
// check if browser size is compatible with click event
onResize = function() {
// if browser size is ok, do the click function
if($(window).width() <= 480){
// click function
$('.sub-toggle').click(function(){
alert('click');
if($(this).hasClass('active')){
alert('active');
$(this).removeClass('active');
} else {
$(this).addClass('active');
}
});
} else{
// if browser size is greater than expected, unbind the click function
$('.sub-toggle').removeClass('active').unbind('click');
}
// just checking how many times the resize function is triggered
console.log('resize: '+ i);
i++;
}
$(document).ready(onResize);
var timer;
$(window).bind('resize', function(){
timer && clearTimeout(timer);
timer = setTimeout(onResize, 500);
});
});
(编辑删除一些不必要的代码)
如果您想看到它的实际效果,我制作了一个 Fiddle(尝试调整输出框架的大小以使其正常工作):http: //jsfiddle.net/C7ppv/1/
也许我错过了一些非常愚蠢的东西,因为我没有大量的 JavaScript 知识。但我想做的只是触发一次点击事件,即使多次调整大小。
我希望我能很好地解释我的问题。我已经搜索并没有找到解决这个问题的方法(或者我可能只是不太清楚要寻找什么)。
任何帮助,将不胜感激!