Vue监听滚动实现锚点定位(双向)示例


Posted in Javascript onNovember 13, 2019

在项目需求中需要实现一个滚轴联动锚点的功能

效果图如下:

Vue监听滚动实现锚点定位(双向)示例

功能代码demo如下:

<template>
 <div class="container">
  <div class="wrapper">
   <div class="section" style="height:500px;width:100%" v-for="(item, index) in list" :key="index" :style="{'height':index==0?'1000px':'500px'}">
    <div style="width:100%;height:100%;font-size:30px;text-align:center;font-weight:bold;color:#fff;" :style="{'background':item.backgroundcolor}">{{item.name}}</div>
   </div>
  </div>
  <div id="nac" style="height:500px;"></div>
  <nav style="position:fixed;right:30px;top:300px;">
  <a class="nav1" v-for="(item, index) in navList" :key="index" @click="jump(index)" :class="index==0?'current':''">{{item}}</a>
  </nav>
 </div>
</template>
<script>
 export default {
  data(){
   return {
    scroll: '',
    list: [{
    name: "第一条",
    backgroundcolor: "#90B2A3"
    }, {
    name: "第二条",
    backgroundcolor: "#A593B2"
    }, {
    name: "第三条",
    backgroundcolor: "#A7B293"
    }, {
    name: "第四条",
    backgroundcolor: "#0F2798"
    }, {
    name: "第五条",
    backgroundcolor: "#0A464D"
    }],
    navList: [1, 2, 3, 4, 5]
   }
  },
  methods: {
   dataScroll: function () {
    this.scroll = document.documentElement.scrollTop || document.body.scrollTop;
   },
   jump(index) {
    let jump = document.getElementsByClassName('section');
    // 获取需要滚动的距离
    let total = jump[index].offsetTop;
    // Chrome
    document.body.scrollTop = total;
    // Firefox
    document.documentElement.scrollTop = total;
    // Safari
    window.pageYOffset = total;
    // $('html, body').animate({
    // 'scrollTop': total
    // }, 400);
   },
   loadSroll: function () {
    var self = this;
    var $navs = $(".nav1");
    var sections = document.getElementsByClassName('section');
    for (var i = sections.length - 1; i >= 0; i--) {
     if (self.scroll >= sections[i].offsetTop - 100) {
      $navs.eq(i).addClass("current").siblings().removeClass("current")
      break;
     }
    }
   }
  },
  watch: {
   scroll: function () {
    this.loadSroll()
   }
  },
  mounted() {
   window.addEventListener('scroll', this.dataScroll);
  }
 }
</script>

<style>
 * {
 padding: 0;
 margin: 0;
 }
 .nav1 {
  display: block;
  width: 40px;
  height: 40px;
  text-align: center;
  line-height: 40px;
  background: #eee;
  margin: 10px 0;
 }
 .current {
  color: #fff;
  background: red;
 }
</style>

以上这篇Vue监听滚动实现锚点定位(双向)示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
清除网页历史记录,屏蔽后退按钮!
Dec 22 Javascript
JS 控制CSS样式表
Aug 20 Javascript
原生JS实现加入收藏夹的代码
Oct 24 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
JavaScript实现上下浮动的窗口效果代码
Oct 12 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
微信小程序实现流程进度的图样式功能
Jan 16 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
vue项目中锚点定位替代方式
Nov 13 #Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 #Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 #jQuery
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
Nov 13 #Javascript
jquery获取input输入框中的值
Nov 13 #jQuery
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
Nov 13 #Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 #Javascript
You might like
PHP数字格式化
2006/12/06 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
PDO::exec讲解
2019/01/28 PHP
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python单例模式的两种实现方法
2017/08/14 Python
浅析python的优势和不足之处
2018/11/20 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
爱护公共设施标语
2014/06/24 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
博士生专家推荐信
2015/03/25 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书