Jquery,取消绑定鼠标滚轮事件,然后在操作完成后重新绑定它?

2024-05-17

我已经为此苦苦挣扎了一段时间了..我正在使用此代码来监视鼠标滚轮,以便它可以用于使用我拥有的滑块滚动..但是,它有一个问题,即操作排队,因此如果你快速滚动鼠标滚轮(就像任何人通常会做的那样),它们就会堆积并导致错误行为。我知道如何用动画处理此类问题,但不知道用鼠标滚轮监视器处理此类问题。

我想做一些事情,比如在操作开始时取消绑定鼠标滚轮(在本例中,在移动鼠标滚轮后滚动滚动条),然后在此之后重新绑定它,因此,如果用户滚动太多太快,它只会忽略,直到初始滚动完成..我尝试了下面的代码,但它没有重新绑定,所以我不确定我做错了什么,任何建议都会受到赞赏。

        $("#wavetextcontainer").bind("mousewheel", function(event, delta) {

   //HERE IS WHERE EVENT IS UNBOUND:
     $("#wavetextcontainer").unbind("mousewheel");

        var speed = 10;
        var mySlider = $("#slider");
        var sliderVal = mySlider.slider("option", "value");

        sliderVal += (delta*speed);

        if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
        else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");

        $("#slider").slider("value", sliderVal);

        event.preventDefault();

      // HERE I WANT TO REBIND THE EVENT:
     $("#wavetextcontainer").bind("mousewheel");

});

您需要存储该函数以便可以引用它,如下所示:

function myHandler(event, delta) {
     $("#wavetextcontainer").unbind("mousewheel", myHandler);

        var speed = 10;
        var mySlider = $("#slider");
        var sliderVal = mySlider.slider("option", "value");

        sliderVal += (delta*speed);

        if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
        else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");

        $("#slider").slider("value", sliderVal);

        event.preventDefault();

      // HERE I WANT TO REBIND THE EVENT:
     $("#wavetextcontainer").bind("mousewheel", myHandler);    
};

$("#wavetextcontainer").bind("mousewheel", myHandler);

通过这样做,您可以调用.bind() http://api.jquery.com/bind/稍后转到同一函数(您不能引用匿名函数)。您目前正在尝试拨打.bind() http://api.jquery.com/bind/ without一个处理任何事情的函数,这不起作用。这还有一个额外的优点,即能够将相同的函数引用传递给.unbind() http://api.jquery.com/unbind/所以它解除了绑定only那个处理程序,不是any mousewheel处理程序。


或者,执行此操作without取消/重新绑定,如下所示:

$("#wavetextcontainer").bind("mousewheel", function (event, delta) {
  event.preventDefault();
  if($.data(this, 'processing')) return; //we're processing, ignore event

  $.data(this, 'processing', true);
  var speed = 10;
  var mySlider = $("#slider");
  var sliderVal = mySlider.slider("option", "value");

  sliderVal += (delta*speed);

  if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
  else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");

  $("#slider").slider("value", sliderVal);
  $.data(this, 'processing', false);
});

这只是使用$.data() http://api.jquery.com/jQuery.data/用元素存储“我们正在工作”的数据条目,如果有任何东西在为真时命中此处理程序,它只会返回并忽略该事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jquery,取消绑定鼠标滚轮事件,然后在操作完成后重新绑定它? 的相关文章

  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • XMLHttpRequest xml 响应与 jQuery 1.4.1 的问题,如何强制将请求响应作为纯文本处理?

    我只是在玩 jQuery 并尝试一些应该很简单的东西 但它就是行不通 document ready function ajax url http soiduplaan tallinn ee data a p routes transport
  • Excel Add In - console.log 在哪里输出它的消息 - NodeJS

    我正在尝试使用 JavaScript API 创建 Excel 插件 但我不明白 console log 在哪里输出它们的消息 所有 Microsoft 文档都包含 console log 示例 但没有解释 console log 输出消息
  • Blueimp jQuery 文件上传,传递额外的表单数据

    我可以使用一些帮助 我已经设法使 blueimp jQuery 文件上传为我工作 但我仍然绝对是一个新手 我对 jQuery 等知之甚少 所以请尝试将其清晰明了地提供给我尽可能简单 我会尝试具体一点 好的 我想实现的是人们可以上传照片 并为
  • jQuery AJAX“multipart/form-data”未发送数据?

    我不知道为什么我无法让 jQuery 传递上传数据 因为 AJAX 对象似乎已正确配置 并且正在发送正确的 Content Type MIME Type 标头 我尝试了两种不同形式的请求 一种是在文字中包含 FormData 对象 另一种是
  • 如何用 jQuery 替换击键?

    我需要能够用 jQuery 替换击键 当按下右箭头时 我希望改为按下 Tab 键 到目前为止我有
  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • 加载 Ember.View 的内容后初始化 jQuery 插件

    DEBUG Ember VERSION 1 0 0 rc 6 ember js DEBUG Handlebars VERSION 1 0 0 rc 4 ember js DEBUG jQuery VERSION 1 9 1 控制器是一个Em
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 如何在 jQuery 中检查复选框是否被选中?

    我需要检查checked复选框的属性 并使用 jQuery 根据选中的属性执行操作 例如 如果age复选框被选中 然后我需要显示一个文本框来输入age 否则隐藏文本框 但下面的代码返回false默认情况下 if isAgeSelected
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div
  • 当鼠标悬停在绝对 div 上时 jQuery 禁用滚动

    当鼠标悬停在 div 上时 我试图禁用窗口鼠标滚动功能 以便仅启用 div 滚动 当鼠标移离 div 时 再次应用滚动到窗口 div 是绝对定位的 我看过这个帖子当鼠标光标位于div内时 使用jquery禁用鼠标滚轮功能 https sta
  • Angular 完成渲染后运行 jQuery

    我正在尝试使用 angularjs 中的 json 对象填充个人资料页面 我正在为此使用指令 我有一个配置文件指令 其中包含配置文件部分指令作为子项 配置文件部分具有作为子级的配置文件子部分指令 我需要在 Angular 开始编译之前和 A
  • 我如何使用 jQuery 来 ajaxify 表单?

    我正在尝试在不使用 jQuery 插件的情况下 AJAXIFY 表单 实现这一目标的过程是什么 我有我的表格 我应该将操作设置为什么 标题脚本应该是什么 请记住 我不想使用任何插件 我只需要一个使用 jquery ajaxifying 表单
  • Bootstrap:使用单个选项卡导航控制多个选项卡面板

    我想用一个选项卡导航来控制两个不同的选项卡内容 在 Bootstrap 3 中 我有一个使用逗号分隔数据目标的解决方案 如本例所示 https stackoverflow com a 19719859 1788961 https stack
  • jQuery 仅匹配 div 中的部分 id

    昨天晚上我遇到了一个不寻常的情况 我只需要匹配 id 的一部分 让我用一个例子来让大家明白 我有几个像这样的div div div div div div div jQuery 就像 jQuery div dont know what to
  • ExitFullScreen 不起作用 + 无论如何要按键盘单击按钮?

    我的浏览器 Google Chrome 版本 33 0 1750 154 m Script function exitFullscreen var element document documentElement if element mo
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • JavaScript:参数列表后缺少 )

    这个 JavaScript 产生一个错误 参数列表后缺少 在 firebug 中使用代码 我究竟做错了什么 功能d缺少左括号 answer after 不应该逃避 只需常规报价即可
  • 如何使用 jQuery 在 ASP.NET MVC 3 中设置会话变量?

    所以这就是问题 如何使用 jQuery 在 ASP NET MVC 3 中设置 Session 变量 我正在尝试使用 ajax or post但问题是我真的不知道该怎么办 描述 只需发布到控制器并在那里设置会话变量即可 Sample jQu

随机推荐