使用vue指令實(shí)現(xiàn)吸頂效果
實(shí)現(xiàn)思路
- 獲取當(dāng)前dom節(jié)點(diǎn)相對(duì)offsetParent的offsetTop,將這個(gè)offsetTop保存起來(防止當(dāng)前dom的position為fixed時(shí)導(dǎo)致offsetTop重置為0)。
- 監(jiān)聽頁面滑動(dòng)距離,當(dāng)滑動(dòng)距離-offsetTop>0的時(shí)候,當(dāng)前dom節(jié)點(diǎn)就吸頂,反之恢復(fù)之前狀態(tài)。
實(shí)現(xiàn)代碼
話不多說上代碼:
export default { stick: { bind: (el, binding, vnode) => { let oldOffsetTop = null; // 保存當(dāng)前元素的offsetTop,防止吸頂后offsetTop重置為0 addEventListener('scroll', e => { const scrollTop = window.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop// 滾動(dòng)距離 const { offsetTop } = el // 元素距離offsetParent的距離 if (!oldOffsetTop) oldOffsetTop = offsetTop if (scrollTop - oldOffsetTop > 0) { el.style.position = 'fixed' if (binding.value) { el.style.top = binding.value + 'px' } else { el.style.top = '0px' } } else { if (el.style.position === 'fixed') { el.style.position = 'static' } } }) } } }
上述代碼實(shí)現(xiàn)了一個(gè)吸頂效果的vue指令,最后只需要在main.js文件中將這個(gè)指令注冊(cè)即可使用。
main.js文件中加入
import directive from './common/directive' for (const key in directive) { Vue.directive(key, directive[key]) }
使用方式:
<li class="stick" v-stick>吸頂效果指令</li>
或者加入偏移量
<li class="stick" v-stick="100">吸頂效果指令</li>
<template> <div id="app"> <!-- <starrySky /> --> <div class="p"></div> <ul> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1222222</li> <li class="stick" v-stick>吸頂效果指令</li> <li>12222222</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> <li>1</li> </ul> </div> </template> <script> export default { components: { } } </script> <style> #app { } .p { height: 100vh; } ul { } li{ padding: 30px; } </style>
到此這篇關(guān)于使用vue指令實(shí)現(xiàn)吸頂效果的文章就介紹到這了,更多相關(guān)vue指令實(shí)現(xiàn)吸頂內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3對(duì)比Vue2的優(yōu)點(diǎn)總結(jié)
vue3解決了vue2的一些缺陷與弊端,學(xué)習(xí)新的技術(shù)是很有必要的,本文總結(jié)了一些vue3的優(yōu)點(diǎn),希望各位能盡快轉(zhuǎn)入vue3的使用中2021-06-06vue webpack build資源相對(duì)路徑的問題及解決方法
這篇文章主要介紹了vue webpack build資源相對(duì)路徑的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Vue2中使用axios的3種方法實(shí)例總結(jié)
axios從功能上來說就是主要用于我們前端向后端發(fā)送請(qǐng)求,是基于http客戶端的promise,面向?yàn)g覽器和nodejs,下面這篇文章主要給大家介紹了關(guān)于Vue2中使用axios的3種方法,需要的朋友可以參考下2022-09-09vue3 與 vue2 優(yōu)點(diǎn)對(duì)比匯總
隨著用vue3 的開發(fā)者越來越多,其必定是又她一定的有帶你,接下來這篇文章小編就為大家介紹vue3 對(duì)比 vue2 有什么優(yōu)點(diǎn)?感興趣的小伙伴請(qǐng)跟小編一起閱讀下文吧2021-09-09