使用vue指令实现吸顶效果

 更新时间:2023年11月17日 11:56:49   作者:烂橘子妙用  
要想实现一个吸顶效果不是很难,网络上有很多教程,其中有一种就是通过fiexd加top来实现,今天突然就想做一个吸顶效果,因为最近都在用vue,所以想用vue来做一个吸顶效果的案例,感兴趣的朋友可以参考下

实现思路

  • 获取当前dom节点相对offsetParent的offsetTop,将这个offsetTop保存起来(防止当前dom的position为fixed时导致offsetTop重置为0)。
  • 监听页面滑动距离,当滑动距离-offsetTop>0的时候,当前dom节点就吸顶,反之恢复之前状态。

实现代码

话不多说上代码:

export default {
  stick: {
    bind: (el, binding, vnode) => {
      let oldOffsetTop = null; // 保存当前元素的offsetTop,防止吸顶后offsetTop重置为0
      addEventListener('scroll', e => {
        const scrollTop = window.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop// 滚动距离
        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'
          }
        }
      })

    }
  }
}

上述代码实现了一个吸顶效果的vue指令,最后只需要在main.js文件中将这个指令注册即可使用。

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>

到此这篇关于使用vue指令实现吸顶效果的文章就介绍到这了,更多相关vue指令实现吸顶内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3对比Vue2的优点总结

    Vue3对比Vue2的优点总结

    vue3解决了vue2的一些缺陷与弊端,学习新的技术是很有必要的,本文总结了一些vue3的优点,希望各位能尽快转入vue3的使用中
    2021-06-06
  • 完美解决通过IP地址访问VUE项目的问题

    完美解决通过IP地址访问VUE项目的问题

    这篇文章主要介绍了完美解决通过IP地址访问VUE项目的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue中使用vue-pdf的方法详解

    vue中使用vue-pdf的方法详解

    这篇文章主要介绍了vue中使用vue-pdf的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Vue 列表过滤与排序的实现

    Vue 列表过滤与排序的实现

    这篇文章主要介绍了Vue 列表过滤与排序的实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-05-05
  • vue webpack build资源相对路径的问题及解决方法

    vue webpack build资源相对路径的问题及解决方法

    这篇文章主要介绍了vue webpack build资源相对路径的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Vue中的components组件与props的使用解读

    Vue中的components组件与props的使用解读

    这篇文章主要介绍了Vue中的components组件与props的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue与TypeScript集成配置最简教程(推荐)

    vue与TypeScript集成配置最简教程(推荐)

    本篇文章主要介绍了vue与TypeScript集成配置最简教程(推荐),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Vue2中使用axios的3种方法实例总结

    Vue2中使用axios的3种方法实例总结

    axios从功能上来说就是主要用于我们前端向后端发送请求,是基于http客户端的promise,面向浏览器和nodejs,下面这篇文章主要给大家介绍了关于Vue2中使用axios的3种方法,需要的朋友可以参考下
    2022-09-09
  • vue3组件的挂载更新流程详解

    vue3组件的挂载更新流程详解

    这篇文章主要介绍了vue3组件的挂载更新流程,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • vue3 与 vue2 优点对比汇总

    vue3 与 vue2 优点对比汇总

    随着用vue3 的开发者越来越多,其必定是又她一定的有带你,接下来这篇文章小编就为大家介绍vue3 对比 vue2 有什么优点?感兴趣的小伙伴请跟小编一起阅读下文吧
    2021-09-09

最新评论