首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何确保鼠标滚轮/滚轮事件在可滚动div中的每个滚动中只触发一次

要确保鼠标滚轮/滚轮事件在可滚动div中的每个滚动中只触发一次,可以通过以下步骤实现:

  1. 监听滚轮事件:使用JavaScript代码添加滚轮事件的监听器。可以使用addEventListener方法来监听滚轮事件,并指定要触发的处理函数。
  2. 防止事件冒泡:在滚轮事件的处理函数中,使用event对象的stopPropagation方法来阻止事件冒泡。这样可以确保滚轮事件只在当前元素中触发,而不会向父元素传播。
  3. 判断滚动方向:在滚轮事件的处理函数中,使用event对象的deltaY属性来判断滚动的方向。deltaY大于0表示向下滚动,小于0表示向上滚动。
  4. 判断滚动位置:在滚轮事件的处理函数中,使用当前可滚动div的scrollTop属性和scrollHeight属性来判断滚动位置。scrollTop表示滚动条顶部距离可滚动div顶部的距离,scrollHeight表示可滚动div的内容高度。通过比较这两个值,可以判断滚动条是否已经滚动到底部或顶部。
  5. 触发滚动事件:根据滚动方向和滚动位置的判断结果,决定是否触发滚动事件。可以使用自定义的标志变量来记录上一次触发滚动事件的位置和方向,与当前位置和方向进行比较,只有在满足条件时才触发滚动事件。

以下是一个示例代码,演示如何确保鼠标滚轮/滚轮事件在可滚动div中的每个滚动中只触发一次:

代码语言:txt
复制
// 获取可滚动div元素
var scrollableDiv = document.getElementById('scrollableDiv');

// 定义标志变量
var lastScrollTop = 0;
var lastScrollDirection = '';

// 监听滚轮事件
scrollableDiv.addEventListener('wheel', function(event) {
  // 防止事件冒泡
  event.stopPropagation();

  // 判断滚动方向
  var scrollDirection = event.deltaY > 0 ? 'down' : 'up';

  // 判断滚动位置
  var isAtTop = scrollableDiv.scrollTop === 0;
  var isAtBottom = scrollableDiv.scrollTop + scrollableDiv.clientHeight === scrollableDiv.scrollHeight;

  // 触发滚动事件
  if ((scrollDirection !== lastScrollDirection || scrollableDiv.scrollTop !== lastScrollTop) && !(isAtTop && scrollDirection === 'up') && !(isAtBottom && scrollDirection === 'down')) {
    // 执行滚动事件的操作
    console.log('滚动事件触发');

    // 更新标志变量
    lastScrollTop = scrollableDiv.scrollTop;
    lastScrollDirection = scrollDirection;
  }
});

这是一个基本的实现方法,可以根据具体需求进行调整和优化。在实际开发中,可以根据项目需要选择合适的框架或库来处理滚动事件,例如使用jQuery的scroll方法或使用React的Scroll组件等。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(TBC):https://cloud.tencent.com/product/tbc
  • 腾讯云物联网平台(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发平台(MPS):https://cloud.tencent.com/product/mps
  • 腾讯云音视频处理(MPS):https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能

前言其实想要实现功能很简单,就是一张图片上监听鼠标滑轮滚动事件,然后根据上滚还是下滚实现图片缩放。...实现思路js,onmousewheel是鼠标滑轮滚动事件,可以通过这个事件触发来改变图片大小,实现图片放大缩小功能。但是我们这里是vue所以使用是:mousewheel。...,显而易见动动鼠标滚轮就能触发事件,但是用光标拖拽滚动条就不能触发事件。...onmousewheelonmousewheel事件:会在鼠标滚轮滚动时候被触发,对鼠标滚轮是否滚动进行判断,但是火狐浏览器不支持这个属性。...页面有滚动时候,滚动条会随着鼠标滚轮滚动滚动,这是浏览器默认行为,可用return false来取消浏览器默认行为。有火狐鼠标滚轮兼容问题。

3.4K20

JS事件

时,表明垂直滚动滚动到底了 阅读知情同意书小案例 onmousemove事件事件对象 获取鼠标的坐标 页面滚动归属者 解决浏览器兼容性常使用以下写法 div跟随鼠标移动 事件冒泡和事件对象event...,读取到一行就运行一行,如果将script标签写到页面上边,代码执行时候,页面还没有完全加载 window.onload事件会在整个页面加载完成之后,才会触发,将对应script代码,写在里面,可以确保...确保一次事件 documnet.onmouseup=null; //当鼠标松开时,释放点击事件捕获 //浏览器兼容性 obj.releaseCapture...div,那么就让鼠标呆在点击出,而不是跑到左上角,计算出div每次鼠标点击时需要偏移量即可 ---- 鼠标滚轮事件----onmousewheel----火狐不支持,由DOMMouseScroll...替代 d1.onmousewheel=function() { alert("鼠标滚轮滚动了"); }; //为div绑定一个鼠标滚轮事件

12.6K10

随心所欲滚动条,远离产品汪(二)

滚轮事件及兼容问题概要 鼠标上,除了点击、拖拽等事件,当然也少不了滚轮事件了,但是比较有意思一点是,平常大家碰到兼容问题首先想到了IE这个万年背锅侠,但是这次还真不是,火狐别树一帜凑了一回热闹。...1.滚轮事件,火狐滚动事件是DOMMouseScroll,而其它浏览器是mousewheel,这一点是要仔细留意。 2.事件对象兼容。...具体实现步骤 滚动事件添加原理其实与实现自定义滚动原理基本一致,只是多了滚轮滚动方向判断及滚动获取。...首先,我们需要明白我们滚轮是作用在谁身上,根据实际需求来进行事件绑定,当我们鼠标移入可视区时,会触发滚轮事件移出可视区时则清除滚轮事件,接下来进行具体代码操作。...较之上篇实现代码,本篇增加了两个变量。 1.通过设置变量Judge来判断滚轮滚动方向,当Judge为ture时,滚轮向上滚动,当Judge为false时,滚轮向下滚动

1.9K80

有意思水平横向溢出滚动

来看看这么一种情况: 我们有一个垂直方向溢出滚动容器,以及一个水平方向溢出滚动容器: 如果使用是非触控板(大部分用户没有触控板),而是使用鼠标来进行操作,会发现,这两个容器,只有垂直方向溢出滚动容器...,是可以响应鼠标滚轮: 垂直方向溢出滚动容器,正常响应鼠标滚轮滚动内容 水平方向溢出滚动容器,不会响应鼠标滚轮,不可滚动内容 那么,这里可能就是一个用户痛点。...那是必须,本文就将介绍一种可能可行技巧,特定场景下在水平方向溢出滚动容器,依然可以用鼠标滚轮进行滚动。 旋转大法 是的,既然只有垂直方向溢出,才能响应滚轮操作。那我们不妨从这个角度入手。...,就变成了水平容器,图中鼠标没有滚动条上容器运动就是通过滚轮实现。...我们实际触发滚动操作实际是 g-pesudo 变化,我们只需要将内容通过再一次旋转,完美叠加在原本容器之上即可: .g-scroll { position: relative; width

2.4K10

JavaScript基础

,会将匹配到所有元素封装到一个数组返回,即使匹配到一个 box1div ...事件委派是利用了冒泡,通过委派可以减少事件绑定次数,提高程序性能 我们希望,绑定一次事件,即可应用到多个元素上,即使元素是后添加我们可以尝试将其绑定给元素共同祖先元素 target :...向目标元素进行事件捕获,但是默认此时不会触发事件 目标阶段 事件捕获到目标元素,捕获结束开始目标元素上触发事件 冒泡阶段 事件从目标元素向他祖先元素传递,依次触发祖先元素上事件 如果希望捕获阶段就触发事件...,可以将addEventListener()第三个参数设置为true一般情况下我们不会希望捕获阶段触发事件,所以这个参数一般都是false 鼠标单击事件 btn.onclick = function.../* * onmousewheel鼠标滚轮滚动事件,会在滚轮滚动触发, * 但是火狐不支持该属性

1.9K20

jquery nicescroll 配置参数

touchbehavior = true时,(默认:true) autohidemode,如何隐藏滚动作品,真=默认/“光标”=进游标隐藏/ false =不隐藏背景,CSS改变轨道背景下,...默认为“” iframeautoresize,加载事件AUTORESIZEiframe(默认:true) cursorminheight,设置像素最小光标高度(默认值:20) preservenativescrolling...,您可以滚动本机滚动区域用鼠标,冒泡鼠标滚轮事件(默认:true) railoffset,您可以添加抵消顶部/左边轨道位置(默认:false) bouncescroll,使滚动弹跳在内容结尾作为移动像...,nicescroll可以使用CSS转换为滚动内容(默认:true) enablemousewheel,nicescroll可以管理鼠标滚轮事件(默认:true) enablekeyboard,nicescroll...,可以用鼠标说明锁API(对象拖动同样问题)(默认:true) cursorfixedheight,用于光标像素设置固定高度(默认:false) hidecursordelay,设置微秒淡出滚动延迟时间

4K80

面试官:哪些浏览器事件不会冒泡?

回答这个问题之前,我们首先要具备DOM事件流捕获与冒泡知识,这里讲JS如何设置这两种事件监听,例如对body注册点击事件:document.body.addEventListener('click...JS通常利用冒泡来进行事件委托,但并不是所有事件都会冒泡。下面我们看看哪些事件是不能冒泡,又有哪些相关应用场景。...注意:有个类似滚动事件滚轮事件wheel是可以触发冒泡( MDN - wheel_event ),我们甚至可以通过额外注册 wheel 监听事件并阻止其冒泡从而让 scroll 事件失效,不过只要滚动条还在... 假设给 ul 设置了 mouseover 事件鼠标经过 ul 时因为 ul 还有 li 元素,鼠标每经过一个...上还是触发了 ul 监听事件,其实这并不符合常理,因为此时鼠标还是 ul 内

1.7K20

前端学习(53)~键盘事件

鼠标的拖拽事件 拖拽流程: (1)onmousedown:当鼠标在被拖拽元素上按下时,开始拖拽; (2)onmousemove:当鼠标移动时被拖拽元素跟随鼠标移动; (3)onmouseup:当鼠标松开时...鼠标滚轮事件 onmousewheel:鼠标滚轮滚动事件,会在滚轮滚动触发。但是火狐不支持该属性。 DOMMouseScroll:火狐需要使用 DOMMouseScroll 来绑定滚动事件。...注意: 如果一直按着某一个按键不松手,那么,onkeydown事件会一直触发。此时,松开键盘,onkeyup事件会执行一次。...当onkeydown连续触发时,第一次和第二次之间会间隔稍微长一点,后续间隔会非常快。这种设计是为了防止误操作发生。 键盘事件一般都会绑定给一些可以获取到焦点对象或者是document。...id="box1"> // 使div可以根据不同方向键向不同方向移动

1K20

学习滚动插件iScroll简单使用

它不支持快速跳跃,滚动条,鼠标滚轮,快捷键绑定。但如果你所需要滚动(特别是移动平台) iScroll 精简版 是又小又快解决方案(这个能应付大多数场景)。...(我正在做更多测试,这可能最终常规iscroll.js脚本,请留意)。 iscroll-zoom.js,标准滚动功能上增加缩放功能。...'); 配置参数说明 var myScroll = new IScroll('#wrapper', { mouseWheel: true, //是否监听鼠标滚轮事件...probeType : 1 滚动不繁忙时候触发;probeType : 2 滚动时每隔一定时间触;probeType : 3 每滚动一像素触发一次 }); iScroll属性方法 功能方法名说明滚动...beforeScrollStart用户点击屏幕,但是还未初始化滚动前scrollCancel初始化滚动后又取消scrollStart开始滚动scroll滚动scrollEnd滚动结束flick轻击屏幕左

2.8K30

接上一篇事件详解

区别是:它包含页面滚动位置, 屏幕横坐标screenX和垂直坐标screenY属性是相对于整个屏幕 理解鼠标滚轮事件: IE6首先实现了mousewheel事件,此后opera,chrome和safari...也都实现了这个事件,当用户通过鼠标滚轮与页面交互,垂直方向上滚动页面时(无论向上还是向下),就会触发mousewheel事件,这个事件可以在任何元素上触发,最终会冒泡到document(IE8)或window...,当用户向后滚动鼠标滚轮时,wheelDelta是-120倍数。...,也是鼠标滚轮滚动触发,与mousewheel事件一样,但是他有关鼠标滚轮信息保存在detail属性,当鼠标向前滚动时,这个属性值是-3倍数,当鼠标滚轮向后滚动时,这个属性值是3倍数;也可以给...上面几个事件都属于冒泡事件,我们可以对此进行取消事件每个触摸event对象都提供了鼠标中常见属性; bubbles, cancelable,view,clientX, clientY ,screenX

1.8K60

jQuery 之 元素节点操作滚轮事件与函数节流

2、prepend()和prependTo():现存元素内部,从前面插入元素 3、after()和insertAfter():现存元素外部,从后面插入元素...4、before()和insertBefore():现存元素外部,从前面插入元素 删除节点 : $('#div1').remove(); todolist(计划列表)实例 滚轮事件与函数节流 jquery.mousewheel...插件使用 jquery没有鼠标滚轮事件,原生js鼠标滚轮事件不兼容,可以使用jquery滚轮事件插件jquery.mousewheel.js。...函数节流 javascript中有些事件触发频率非常高,比如onresize事件(jq是resize),onmousemove事件(jq是mousemove)以及上面说鼠标滚轮事件事件内多处触发执行绑定函数...互联网演化进程,网页制作是Web1.0时代产物,那时网站主要内容都是静态,用户使用网站行为也以浏览为主。

1.3K60

winform笔记

"需要读取列2(id)"; //comboBox真正值 comboBox.DataSource = ds.Tables["虚拟列名"];//绑定数据源 2.FlowLayoutPanel支持鼠标滚轮滚动...FlowLayoutPanel控件不直接支持MouseWheel事件.即滚动滚轮也不会响应.所以必须手动来支持响应滚轮....如果支持MouseWheel事件,还是不一定在滚动滚轮时候,就能引发MouseWheel事件.所以,必须让鼠标停留在控件上时,让控件处于输入焦点状态.这是,滚动滚轮就可以引发MouseWheel事件了...//在此处设断点,发现点击不同Item后,此事件居然执行了2次 //第一次是取消当前Item选中状态,导致整个ListViewSelectedIndices...dialog定义获取数据方法 public String getValue(){ return "aaa"; } 然后调用dialog主程序如下调用 Dialog dlg =

1.5K20

关于ScrollViewr和滚动轮劫持(scroll-wheel-hijack)

所谓滚动轮劫持,简单来说即是一个可以滚动页面使用鼠标滚轮滚动页面的过程鼠标进入某个可以滚动子元素导致在这个子元素滚动而整个页面想滚滚不动了。 具体看看这个例子: ?...当然还有另外很多种情况滚动轮劫持,也有很多解决方案,这篇文章介绍我遇到情况和我解决方案。 2....实现 WPF要禁止ScrollViewer捕获鼠标滚动时间,可以重写OnMouseWheel成一个空方法: protected override void OnMouseWheel(MouseWheelEventArgs...e) { } OnMouseWheel方法用于响应鼠标滚轮事件,将它重载成空方法即不再处理鼠标滚利事件。...熟悉了上面几个属性作用后我们可以更好地控制鼠标滚轮行为,当鼠标向上滚动时,判断现在是否已经滚到顶了,如果是就不处理鼠标滚轮事件: if (VerticalOffset == 0 && e.Delta

1.2K30

DOM、BOM一些兼容性问题

之后,W3C 标准化了鼠标滚轮事件 —— wheel ,名字有所改变。标准化后滚轮事件几乎和原来事件对象一样。但是兼容性比较差,IE 压根没有这个事件名称。...滚轮事件中有一个属性可以判断鼠标滚轴是向下滚动还是向上滚动,这个属性值是一个数值。...Firefox 支持 wheel 事件名称获取到 detail 值好像判断不了滚轮滚动方向(其中有一个 deltaY,属性做判断,大于零时表示向下滚动,小于零时表示向上滚动),使用 DOMMouseScroll...keypress 与 keydown 很相似,都是表示鼠标按下然后触发事件。...而使用 keypress ,却可以触发,因为他触发字符能被输入键,并返回可以用事件对象 keyCode 找到该字符 ASCII 码,或者直接用事件对象 key 获取输入字符。

1.5K20

C++ Qt开发:Charts折线图绑定事件

以下是这些事件处理函数简要说明: 鼠标按下事件 (mousePressEvent): 当鼠标按下时触发该函数,你可以处理鼠标按下时逻辑,如获取鼠标坐标、进行拖拽等。...鼠标释放事件 (mouseReleaseEvent): 当鼠标释放时触发。你可以该函数处理鼠标释放时逻辑,如执行点击操作。...鼠标滚轮事件 (wheelEvent): 当鼠标滚轮滚动触发。你可以该函数处理鼠标滚轮事件,如放大缩小、滚动视图等。 键盘按下事件 (keyPressEvent): 当键盘按键被按下时触发。...你可以该函数处理键盘抬起时逻辑,如释放某个按键状态。 附件笔者将代码整理成了Keyboard and mouse文件,读者自行打开该文件编译运行观察键盘鼠标事件如何被重写。...鼠标滚轮事件 (wheelEvent): 根据滚轮滚动方向,调整 g_x 值,然后使用 zoom 方法进行缩放。

21710

JQ事件事件对象

键盘按下松开整个过程触发事件 //keydown()和keypress区别    keydown()按下任意键都会触发,但keypress()事件在按下键盘任意字符键(A-Z)时触发,功能键不会触发...()和focusin() 区别   focusin可以父元素上检测子元素获得焦点情况 而focusout可以父元素上检测子元素失去焦点情况  四 其他事件   1 scroll()滚动滚动条时触发事件...1 event .type   描述事件类型        2 event.target  触发事件DOM元素        3  event.currentTarget 事件冒泡阶段的当前DOM...mousedown、mouseup事件,event.which属性返回是对应鼠标按钮映射代码值(相当于event.button)。...以下是主要鼠标按钮映射代码对应表 Event.which属性值 对应鼠标按钮 1 鼠标左健 2 鼠标健(滚轮键) 3 鼠标右健       6 event.preventDefault()  阻止事件默认行为

4.1K20

原生 JS 手写一个优雅图片预览功能,带你吃透背后原理

CSS3 transform 变换,该属性应用于元素2D或3D上旋转,缩放,移动,倾斜等等变换,通过设置 translate(x,y) 即可偏移元素位置,设置scale即可缩放元素,当然你也可以设置...例如鼠标移动事件对应 mousemove,移动端因为没有鼠标则对应 touchmove,而本文将介绍如何仅通过指针事件来进行多端统一事件监听。...虽然浏览器滚动对应其实是 scroll 事件,但我们PC上滚动通常都是用利用滚轮(笔记本触控板也被视作滚轮),所以滚轮事件阻止系统默认事件也就阻止了滚动,但不是完全阻止,因为滚动条没隐藏的话还是可以拖动来滚动页面的...注意滚轮事件(wheel)是可以触发冒泡捕获,而滚动事件(scroll)却无法触发冒泡,了解更多可以看我之前一篇文章:哪些浏览器事件不会冒泡。至于移动端又是为什么阻止了滚动呢?...本例代码这个CSS本身是没有意义,为只是触发css3硬件加速来提升性能,那为什么不直接使用 translate3d() 呢?

2.3K71

一次,彻底解决滚动穿透

当我们滚动鼠标滚轮,或者滑动手机屏幕时,触发对象可分为两种类型(详见W3C规范): viewport被触发滚动, eventtarget为关联 Document element元素被触发滚动,通常也就是我们添加...;} 这个想法很美好,不侵入JS情况下禁止滚动,然而: 加 overflow:hidden对移动端是无效!...当body高度被内容撑开而滚动时,如果不对body高度加以限制,加入 overflow:hidden,此时移动端依然可以滚动。...这样一来只需要在滚动容器上加入 can-scroll类名即可滚动,但是这种滚动又随之带来一个问题: 当滚动到元素顶部和底部再继续滚动时,又会触发滚动穿透!...,看起来滚动穿透问题得到了完美的解决,但是: 当多个浮层同时存在时,滚动穿透将再次触发 支持多浮层 之所以会出现多浮层问题,是因为我们往 document上绑事件一次,这个是对,但是每个浮层关闭时候都会触发

2.3K21

jquery 滚轮插件 示例 - 整屏滚动

正屏滚动需求 ? ? ? ? ? 编写通过滚轮上下切换这五个屏幕效果。 要做出这个效果,其实不用说,首先要把这五个div基本HTML+CSS给写出来先。 准备好五个图片 ? 001.png ?...在下面实现代码时候需要使用定时器来控制函数节流,因为鼠标滚轮事件触发非常快,必须限制之后才能有较好体验,概念如下。...函数节流 javascript中有些事件触发频率非常高,比如onresize事件(jq是resize),onmousemove事件(jq是mousemove)以及上面说鼠标滚轮事件事件内多处触发执行绑定函数...,可以巧妙地使用定时器来减少触发次数,实现函数节流。...互联网演化进程,网页制作是Web1.0时代产物,那时网站主要内容都是静态,用户使用网站行为也以浏览为主。

4.5K20
领券