在div上禁用鼠标滚轮插件

时间:2015-10-14 20:11:59

标签: javascript jquery scroll mousewheel

我正在使用此处显示的鼠标滚轮插件:

https://github.com/jquery/jquery-mousewheel

它适用于让页面水平滚动,但我想暂时禁用它并在弹出几个特定div时恢复垂直滚动。我试过这个:

jQuery(document).ready(function() {

    jQuery('html, div.everthing').mousewheel(function(e, delta) {
      this.scrollLeft -= (delta * 1);
      e.preventDefault();
    });

    jQuery(".interests.content .child").mouseover(
      function stopHorizScroll(){
      var vScroll = [
        jQuery(".child.books").attr("class"),
        jQuery(".child.quotes").attr("class"),
        jQuery(".child.humans").attr("class"),
        jQuery(".child.travel").attr("class")
        ];

      var x = "show"

    if (vScroll[0].indexOf(x) !== -1) {
      jQuery('html, div.everthing').mousewheel(function(e, delta) {
      return false; 
    }); 
    }
   });

 });

1 个答案:

答案 0 :(得分:0)

您已经绑定了鼠标滚轮事件。 return false对您之前绑定的事件没有任何作用。要执行您要执行的操作,您需要取消绑定原始事件,然后在mouseleave上重新绑定或停止传播。我不确定你是否可以取消绑定/销毁鼠标滚轮事件,我不确定e.stopPropagation()是否可以正常工作。

也许更简单的解决方案是在有人悬停在该div上时设置标志,并在设置标志时阻止水平滚动。例如,像这样的东西可能会起作用:

var stopScroll = false;

jQuery('html, div.everthing').mousewheel(function(e, delta) {
  if ( stopScroll ) return;

  this.scrollLeft -= (delta * 1);
  e.preventDefault();
});

jQuery(".interests.content .child").hover(function() {
  stopScroll = true;
}, function() {
  stopScroll = false;
});