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 相关文章推荐
JavaScript CSS菜单功能 改进版
Dec 20 Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
jQuery原生的动画效果
Jul 10 Javascript
原生js制作日历控件实例分享
Apr 06 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
谈谈vue中mixin的一点理解
Dec 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抓取网站图片并保存的实现方法
2015/10/29 PHP
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js post提交调用方法
2014/02/12 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
Angular路由简单学习
2016/12/26 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
Python Queue模块详解
2014/11/30 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python机器学习之贝叶斯分类
2018/03/26 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
车间班组长岗位职责
2013/11/13 职场文书
精细化工应届生求职信
2013/11/17 职场文书
创业计划书六个要素
2013/12/26 职场文书
大学毕业生自荐书怎么写?
2014/01/06 职场文书
校园招聘策划书
2014/01/09 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
安全教育月活动总结
2014/05/05 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
活动总结格式
2014/08/30 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书