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代码
Mar 11 Javascript
jquery仿搜索自动联想功能代码
May 23 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
Vue使用lodop实现打印小结
Jul 06 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 Javascript
vue中实现弹出层动画效果的示例代码
Sep 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
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
Pytorch之contiguous的用法
2019/12/31 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
python des,aes,rsa加解密的实现
2021/01/16 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
应届生的求职推荐信范文
2013/11/30 职场文书
单身联谊活动方案
2014/01/29 职场文书
迎新晚会邀请函
2014/02/01 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
投资合作协议书
2014/04/17 职场文书
店铺转让协议书
2014/12/02 职场文书
求职意向书范本
2015/05/11 职场文书
行政二审代理词
2015/05/25 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书