回答
在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