vue滚动固定顶部及修改样式的实例代码

下面是关于“vue滚动固定顶部及修改样式的实例代码”的完整攻略:

一、思路梳理

本文实例通过自定义指令来实现 vue 滚动固定顶部及修改样式的效果,核心步骤如下:

  1. 在指令 bind 钩子中获取当前元素的 offsetTop 和 scrollTop,记录在对象中。
  2. 在指令 inserted 钩子中添加滚动事件,判断当前元素是否到达顶部,如果到达顶部则设置该元素的 position 为 fixed,top 设置为 0。
  3. 在指令 unbind 钩子中移除该指令所绑定的事件。

二、实现代码

1. 自定义指令实现

// 指令名为vueFixed
Vue.directive('vueFixed', function (el, binding) {
  const fixedCls = binding.value.fixedCls || 'fixed-top' // 固定后的样式名,支持传参自定义
  let originTop = el.offsetTop // 元素距离页面顶部的高度
  let originScrollTop = 0 // 滚动距离

  window.addEventListener('scroll', fixed, true)

  function fixed() {
    originScrollTop = document.documentElement.scrollTop || document.body.scrollTop
    if (originScrollTop >= originTop) {
      el.style.position = 'fixed'
      el.style.top = '0'
      el.classList.add(fixedCls)
    } else {
      el.style.position = 'static'
      el.style.top = null
      el.classList.remove(fixedCls)
    }
  }

  el.addEventListener('unbind', function () {
    window.removeEventListener('scroll', fixed, true)
    el.removeEventListener('unbind', arguments.callee)
  })
})

2. 组件调用示例

<template>
  <div>
    <!-- 示例一:固定顶部并且设置样式 -->
    <div v-vueFixed="{fixedCls:'fixed-top-style'}">我是需要固定的元素</div>

    <!-- 示例二:固定顶部,无需修改默认样式,两种写法相同 -->
    <div v-vueFixed>我是需要固定的元素</div>
  </div>
</template>

<script>
export default {
  name: 'Demo',
  data() {
    return {}
  }
}
</script>

<style>
.fixed-top { /* 滚动固定时的样式 */ }
.fixed-top-style { /* 滚动固定时的样式 */ }
</style>

三、示例说明

示例一:

如上代码所示,通过给 vueFixed 指令传入 fixedCls 参数值 ‘fixed-top-style’,即可自定义固定后的样式。

也就是说,当该元素开始滚动固定时,新添加的 class 为 ‘fixed-top-style’,这时候可以通过 CSS 来修改滚动固定时元素的样式。

示例二:

如上代码所示,如果没有传入 fixedCls 参数值,则使用默认的样式。

此时,滚动固定时的样式不需要额外进行设置,而是默认的样式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue滚动固定顶部及修改样式的实例代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • css3 column实现卡片瀑布流布局的示例代码

    下面是关于“CSS3 column实现卡片瀑布流布局的示例代码”的完整攻略。 一、CSS3 column介绍 1. 概述 CSS多列布局(CSS3 column)是CSS3中的一种新特性,可以让我们更方便地实现分栏布局,常用在报纸、杂志等排版较为复杂的场合。 2. column-count column-count可以指定分栏数量,例如: .containe…

    css 2023年6月11日
    00
  • padding盒子内部文字跟盒子之间的距离

    首先,padding 是盒子和其边框之间的空间,而不是盒子内部的空间。因此,padding 会对盒子的大小产生影响,并且也会影响盒子内部内容的位置。 在 CSS 中,我们可以使用 padding 属性来定义盒子的内边距。这个属性可以取一个数值,表示上下左右四个方向的内边距大小(单位可以是 px、em 等),也可以取两个值,表示上下和左右两个方向的内边距大小。…

    css 2023年6月9日
    00
  • CSS特殊性、继承与层叠

    CSS特殊性、继承与层叠是CSS样式表的基础知识,理解这些概念对赋予网页以不同的样式非常重要。下面是本题要求的完整攻略: CSS特殊性 特殊性指的是选择器某个部分对样式表条目优先级的影响力。CSS规定了4个级别来计算特殊性,从左到右优先级依次降低: 内联样式(inline style) ID选择器 类选择器、属性选择器、伪类 标签选择器、伪元素 特殊性越高,…

    css 2023年6月9日
    00
  • 深入理解CSS中的属性模块

    深入理解CSS中的属性模块 CSS是Web开发中不可或缺的一部分,其中属性模块是CSS的重要组成部分。本攻略将深入讲解CSS中的属性模块,包括属性的分类、属性的继承、属性的优先级、属性的默认值等。 1. 属性的分类 CSS中的属性可以分为以下几类: 布局属性:用于控制元素的位置和大小,例如position、display、float等。 盒模型属性:用于控制…

    css 2023年5月18日
    00
  • 在vue项目中引入scss并使用scss样式详解

    下面是「在Vue项目中引入SCSS并使用SCSS样式详解」的完整攻略。 第一步:安装依赖 首先,通过npm安装需要用到的依赖: npm install –save-dev sass-loader sass 其中,sass-loader用于将SCSS代码转换为CSS,sass则是sass-loader的依赖。 第二步:配置webpack 接下来,在webpa…

    css 2023年6月9日
    00
  • JavaScript闭包原理与用法学习笔记

    JavaScript闭包原理与用法学习笔记 什么是JavaScript闭包 闭包(Closure)是指有权访问另一个函数作用域中变量的函数。在JavaScript中,函数可以作为另一个函数的参数或者返回值,如果在一个函数内部定义了另一个函数,并且内部函数可以访问外部函数的变量,则形成了一个闭包。闭包是JavaScript强大的特性之一,能够帮助我们实现诸如数…

    css 2023年6月10日
    00
  • React 中使用 Redux 的 4 种写法小结

    React 中使用 Redux 的 4 种写法小结指的是在 React 中集成 Redux 的四种不同的方法。这四种方法分别是: 1.传统的用法(Traditional Way) 2.React-Redux 库的用法(Using React-Redux Library) 3.Redux Hooks 的用法(Using Redux Hooks) 4.Redux…

    css 2023年6月10日
    00
  • BooStrap对导航条的改造实践小结

    以下是关于 “BooStrap对导航条的改造实践小结” 的完整攻略: 1. 什么是Bootstrap Bootstrap 是使用 HTML, CSS 和 JavaScript 开发响应式页面的前端框架。Bootstrap 的核心是一个响应式的、移动设备优先的 grid 系统和一组预定义的 UI 组件。Bootstrap 包括用于排版、表格、表单、导航和其他界…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部