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 相关文章推荐
基于jquery自定义图片热区效果
Jul 21 Javascript
理解Javascript闭包
Nov 01 Javascript
js实现网页随机切换背景图片的方法
Nov 01 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
完美解决iview 的select下拉框选项错位的问题
Mar 02 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
js+canvas实现验证码功能
Sep 21 Javascript
vue+axios 前端实现的常用拦截的代码示例
Aug 23 Javascript
vue模仿网易云音乐的单页面应用
Apr 24 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
Oct 31 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 DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
webpack之devtool详解
2018/02/10 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python正则表达式知识汇总
2017/09/22 Python
django加载本地html的方法
2018/05/27 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
网站域名和主机:Domain.com
2019/04/01 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
社区国庆节活动方案
2014/02/05 职场文书
离职报告范文
2014/11/04 职场文书
公务员考察材料范文
2014/12/23 职场文书
会计入职心得体会
2016/01/22 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
python用tkinter开发的扫雷游戏
2021/06/01 Python
详解Python描述符的工作原理
2021/06/11 Python