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 相关文章推荐
AJAX架构之Dojo篇
Apr 10 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
基于JavaScript的操作系统你听说过吗?
Jan 28 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
Sep 04 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
详解vue.js全局组件和局部组件
Apr 10 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
Apr 12 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 Javascript
js实现菜单跳转效果
Dec 11 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
Jan 25 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 Http_Template_IT类库进行模板替换
2009/03/19 PHP
php防攻击代码升级版
2010/12/29 PHP
php debug 安装技巧
2011/04/30 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
PHP中Array相关函数简介
2016/07/03 PHP
Javascript的匿名函数小结
2009/12/31 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
港湾网络笔试题
2014/04/19 面试题
车辆维修工自我评价怎么写
2013/09/20 职场文书
外语专业毕业生个人的自荐信
2013/11/19 职场文书
毕业生优秀推荐信
2013/11/26 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS