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之一
Apr 27 Javascript
firefox插件Firebug的使用教程
Jan 02 Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
jquery 触发a链接点击事件解决方案
May 02 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
Apr 16 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
JS验证input输入框(字母,数字,符号,中文)
Mar 23 Javascript
详解JS中的attribute属性
Apr 25 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
Feb 19 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下escape解码函数的实现方法
2010/08/08 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
JavaScript触发器详解
2007/03/10 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
违反校纪校规检讨书
2014/02/15 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
CSS基础详解
2021/10/16 HTML / CSS