在之前(而不是之后)触发的事件DOM 元素在 javascript 中滚动
Event that gets fired before (not after!) DOM elements are scrolled in javascript
基本上,我想在滚动 DOM 元素之前做一些预处理。问题是滚动事件是在 DOM 元素滚动后触发的。我知道当您使用鼠标滚轮滚动时,鼠标滚轮滚动事件会在 DOM 元素滚动之前触发,尽管它没有为您提供预期的滚动位置,并且它只是一种滚动类型。我想知道是否有任何事件会为每个滚动方法触发(例如鼠标滚轮、拖动滚动条、按下向下箭头等)在滚动 DOM 元素之前。它不一定是一个事件。我没有尝试滚动到某个位置,因此 scrollTo 将不适用。
滚动的事件链:用户滚动 -> DOM 元素物理滚动 ->触发滚动事件 ->处理内容
所需的事件链:用户滚动 ->捕获某些事件并执行我想做的事情 -> DOM 元素物理滚动 ->触发滚动事件 ->处理东西
这里有一些你可能想尝试的东西。
给你的页面overflow:hidden
,这样就不会出现滚动条,然后在内容上放置一个绝对定位的div,具有正确的宽度和高度。滚动此div 时,可以在重新触发事件之前更新任何基础内容。
您还需要通过点击等,所以这确实是一个黑客。像jQuery这样的东西将有助于触发事件和测量内容的高度。
编辑:根据浏览器的不同,css pointer-events:none
可能会在这里有所帮助。见 https://developer.mozilla.org/en/css/pointer-events
做的最好的事情就是当onScroll
触发时,如果scrollTop
> thingToStick
与顶部的距离,则position: fixed
设置为thingToStick
否则,position
设置为原来的任何内容。从不粘到粘时它会闪烁,但除此之外,你不会有任何闪烁。
在 sudo-ish 代码中:
onScroll = function()
{
if(scrollTop > thingToStick.y)
thingToStick.position = "fixed";
else
thingToStick.position = "relative";
}
在不支持fixed
定位的浏览器中,您会陷入
以前从未尝试过,但要打破事件链,可以:
- 捕获滚动事件
- 做你的事情
- 使用 preventDefault() 和 stopPropagation 来禁止事件
- 使用原始事件伪造新的滚动事件(我认为这应该是可行的)
希望这会有所帮助。
- DOM事件通过JSON转换为java
- 从dom中删除任何元素后,Touchmove事件停止触发
- IE9-添加和删除DOM元素会破坏父keydown事件
- 调用DOM提交方法时未激发jQuery提交事件
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- 停止事件以在DOM中弹出
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- Meteor - 从另一个模板事件处理程序访问 DOM 元素
- 触发具有较低Z索引值的DOM元素的事件
- 动态创建的DOM元素上的jQuery事件绑定
- Angular JS根据搜索结果和点击事件更新DOM元素
- 在 JavaScript 中迭代 DOM 时关闭标记事件
- 如何克隆或重新调度 DOM 事件
- 当我认为它不应该重新渲染视图时,如何防止 Meteor 在 html 选择 dom 单击事件上重新渲染视图
- 测试 JavaScript Zombie 事件处理程序或 DOM 元素
- 如何将 DOM 元素绑定到自定义 $.touchpress 事件
- 绘制DOM元素:鼠标事件会被背景元素混淆
- DOM事件链接不起作用
- 禁用Javascript事件DOM中的Function
- 在之前(而不是之后)触发的事件DOM 元素在 javascript 中滚动