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 相关文章推荐
js tab 选项卡
Apr 26 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
JS链式调用的实现方法
Mar 07 Javascript
提升PHP安全:8个必须修改的PHP默认配置
Nov 17 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
JQuery获得内容和属性方法解析
May 30 jQuery
如何使用gpu.js改善JavaScript的性能
Dec 01 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中mkdir函数用法实例分析
2014/11/15 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
python文件读写代码实例
2019/10/21 Python
Python日志处理模块logging用法解析
2020/05/19 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
护士演讲稿范文
2014/01/05 职场文书
地质灾害防治方案
2014/05/14 职场文书
片区教研活动总结
2014/07/02 职场文书
护士求职信
2014/07/05 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
高中生军训感言
2015/08/01 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS