当内部元素滚动位置到达顶部/底部时,防止父元素滚动? [重复]
|
这个问题已经在这里有了答案:
没有找到相关结果
已邀请:
30 个回复
烷刨画颠离
掸牛浓疗
,它等于将滚动区域移动到的
的数量。如果此值为is3ѭ,那么我们将滚动
。如果
是
,那么我们滚动
。 FireFox:FireFox使用
作为事件,并填充
,其
与上述内容相反。它通常返回
的间隔,而其他浏览器则以intervals12ѭ的间隔返回滚动(至少在我的机器上)。要更正,我们只需检测它并乘以
即可归一化。 如果
的可滚动区域已在顶部或底部最大位置,则@amustill的答案通过取消事件来起作用。但是,在“ 15”大于剩余可滚动空间的情况下,Internet Explorer会忽略取消的事件。 换句话说,如果您有一个
高的
包含
可滚动内容,而当前
是
,则
事件告诉浏览器进一步滚动scroll22ѭ会导致
和
滚动,因为
+
>
。 所以-要解决该问题,我们必须做一些稍微不同的事情,如下所示: 必需的
代码是:
从本质上讲,此代码取消了任何会产生不必要边缘条件的滚动事件,然后使用jQuery将
中的
设置为最大值或最小值,具体取决于
事件所请求的方向。 由于在这两种情况下事件都被完全取消,因此它根本不会传播到“ 33”,因此解决了IE以及所有其他浏览器中的问题。 我还在jsFiddle上提出了一个工作示例。
豪抱怒掳
凰葱崎济邯
然后将其添加到可滚动元素(下拉菜单ul)中:
在Chrome和Firefox上进行了测试。当在滚动区域的顶部或底部附近(但不在顶部)进行大的鼠标滚轮移动时,Chrome的平滑滚动克服了这一缺陷。
扇献隙
呸溉
CSS:
2.模态滚动中没有父滚动 祖先结束滚动的原因是滚动事件冒泡,并且链上的某些元素能够处理它。停止的一种方法是确保链上的所有元素都不知道如何处理滚动。根据我们的示例,我们可以重构树以将模态移出父元素。由于晦涩的原因,仅保留父代和模式DOM兄弟是不够的。父级必须由建立新堆栈上下文的另一个元素包装。一个绝对定位的包装器可以解决这个问题。 我们得到的结果是,只要模式接收到滚动事件,该事件就不会冒泡到\“ parent \”元素。 通常应该可以重新设计DOM树以支持此行为,而不会影响最终用户看到的内容。 https://jsfiddle.net/0bqq31Lv/3/ HTML:
CSS(仅限新功能):
3.除了滚动模式以外,其他任何地方都没有滚动 上面的解决方案仍然允许父级接收滚动事件,只要它们没有被模式窗口拦截(即,如果光标不在模式上时由鼠标滚轮触发)。有时这是不可取的,并且我们可能希望在模式启动时禁止所有背景滚动。为此,我们需要在模式后面插入一个覆盖整个视口的额外堆栈上下文。我们可以通过显示一个绝对定位的叠加层来做到这一点,如果需要的话可以完全透明(但不是
)。 https://jsfiddle.net/0bqq31Lv/2/ HTML:
CSS(#2之上的新功能):
邦绊门蔽惩
或
处理性能问题,可以使用以下代码: CSS:
的HTML:
js:
工作示例:http://jsbin.com/damuwinarata/4
物崎巩
用法
希望这对下一个通过Google搜索到达这里的人有所帮助。
芳菱挨啡
凄挡
脾萌
娜拐赐巫潭
娠频摩
苦诫
香腔弥胯瓤
stopImmediatePropagation()确保不要从可滚动子区域滚动父可滚动区域。 这是它的原始JS实现: http://jsbin.com/lugim/2/edit?js,输出
撕吠
不要让行数愚弄您,这很简单-只是为了提高可读性而有些冗长(自我记录代码ftw对吗?) 我还要提到的是,这里的语言是TypeScript,但是与往常一样,将其转换为JS很简单。
梆晨灸碾
请记住,我和其他人一样,必须将值调整px,即-= 2的高度。 基本上,主要的区别在于,在MooTools中,增量信息来自event.wheel,而不是传递给事件的额外参数。 另外,如果我将此代码绑定到任何东西,我也会遇到问题(绑定函数的event.target.scrollHeight不等于非绑定函数的this.scrollHeight) 希望这对某人有所帮助,就像这篇文章对我有所帮助;)
缕嚏冻
贡炮逗握惫
和jquery属性
检测滚动的结束,然后将
绑定到wheeling事件以防止滚动。
缉康怪
这对我有用。
橙绥
https://github.com/basselin/jquery-mousewheel-stop-propagation/blob/master/mousewheelStopPropagation.js
骨酚柯
如果您触发许多滚动事件,则子div的背景中会出现闪烁,因此可以对其进行调整,但是几乎没有注意到,这对于我的用例来说已经足够了。
翁茄口霉氖
: HTML结构
造型
在此处播放演示。
车料
。这样,您就不必实现自己的滚轮滚动。 这是防止文档滚动的示例,但是可以针对任何元素进行调整。
枫湃揩乾纲
添加以下指令。我选择将其添加为属性
插件无法在其网站上记录的重要内容是必须遵循的HTML结构。
属性“ 77”必须包含“ 78”类,并且所有属性都必须位于“ 79”类或您选择的任何类之内,并且“ 80”类必须是级联的。
锹缄
蓟类
纫合峭
用法:
钾涎净介
队辅坟阮阶