回答
在Chrome添加position: sticky
之后,发现它是not ready enough和relegated to to --enable-experimental-webkit-features flag。保罗爱尔兰said in February“功能是在一个怪异的状态atm”。
我正在使用the polyfill,直到它变得非常头痛。它可以很好地工作,但有一些角落案例,比如CORS问题,并且通过为所有CSS链接执行XHR请求并重新解析浏览器忽略的“position:sticky”声明,从而减缓页面加载速度。
现在我正在使用ScrollToFixed,我比StickyJS更好,因为它不会使用包装搞乱我的布局。
目前没有本地解决方案。见Targeting position:sticky elements that are currently in a 'stuck' state。不过,我有一个CoffeeScript解决方案,可以与本地position: sticky
以及实现粘性行为的polyfills一起使用。
添加“粘性”类元素,你想成为粘性:
.sticky {
position: -webkit-sticky;
position: -moz-sticky;
position: -ms-sticky;
position: -o-sticky;
position: sticky;
top: 0px;
z-index: 1;
}
CoffeeScript的监视“粘”元素的位置,并添加“坚持”上课的时候,他们是在“粘性”状态:
$ -> new StickyMonitor
class StickyMonitor
SCROLL_ACTION_DELAY: 50
constructor: ->
$(window).scroll @scroll_handler if $('.sticky').length > 0
scroll_handler: =>
@scroll_timer ||= setTimeout(@scroll_handler_throttled, @SCROLL_ACTION_DELAY)
scroll_handler_throttled: =>
@scroll_timer = null
@toggle_stuck_state_for_sticky_elements()
toggle_stuck_state_for_sticky_elements: =>
$('.sticky').each ->
$(this).toggleClass('stuck', this.getBoundingClientRect().top - parseInt($(this).css('top')) <= 1)
注意:此代码仅适用于垂直粘滞位置。
我知道这个问题已经有一段时间了,但我找到了一个很好的解决方案。插件stickybits在受支持的情况下使用position: sticky
,并在元素被“卡住”时将类应用于该元素。我最近用它得到了很好的结果,并且在撰写本文时,它是积极的开发(对我来说这是一个积极的发展):)
如果有人通过Google来到这里,他们自己的工程师有一个解决方案IntersectionObserver,自定义事件,并哨兵:
https://developers.google.com/web/updates/2017/09/sticky-headers
- 1. BindingSource ListChanged事件触发位置更改
- 2. Firefox不触发粘贴事件
- 3. 用Javascript触发“粘贴”事件
- 4. 手动触发的粘贴事件没有.originalEvent属性?
- 5. 自定义TouchDevice触发不正确位置的触摸事件
- 6. 触发事件,当2个SpriteNode位于相同位置时
- 7. 在PHP中放置数据库事件触发器的位置?
- 8. BizTalk 2013文件在非事件接收位置触发
- 9. 触发事件
- 10. 触发事件
- 11. 触发事件
- 12. 触发事件
- 13. 触发事件
- 14. 触发事件
- 15. 事件触发
- 16. 触发事件
- 17. 如何让控件在事件触发时设置属性
- 18. Android和触摸事件的位置
- 19. Android浏览器触摸事件位置
- 20. fullcalendar eventDragStop在事件返回到原始位置后触发
- 21. 如何在用户输入特定位置时触发事件?
- 22. 获取触发Geofence事件的当前位置
- 23. WP7位置工具不会触发positionChanged事件
- 24. 事件触发,如果用户不允许使用位置
- 25. OnTextChanged事件触发,但当我移动鼠标位置
- 26. Soundcloud事件一旦被触发后加载相同的位置
- 27. 如何在XAML中的特定位置触发路由事件?
- 28. 地理位置状态事件永不会触发
- 29. 如何在UIImageView到达特定位置时触发事件?
- 30. 如何在指定位置触发Ember.View上的点击事件
这很有趣,因为那篇文章最精彩的评论正好解决您的问题。这家伙得到了发现,这应该是一个媒体查询,而不是一个财产。这样,当元素卡住时(我们经常这样做),您可以改变样式。哦,一个人可以做梦。 – 2013-04-30 16:44:11
是的,我注意到这个评论,他的提议似乎好得多。不过,“位置:粘性”是Chrome实施的,所以我正在寻找一种可用的方式! – AlecRust 2013-04-30 16:46:25
您是否找到解决方案? – 2014-04-16 15:29:32