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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
Javascript this指针
Jul 30 Javascript
jquer之ajaxQueue简单实现代码
Sep 15 Javascript
javascript学习基础笔记之DOM对象操作
Nov 03 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
详解vue.js2.0父组件点击触发子组件方法
May 10 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 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
discuz安全提问算法
2007/06/06 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
JavaScript中的类继承
2010/11/25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
小程序实现录音功能
2020/09/22 Javascript
Python入门篇之面向对象
2014/10/20 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
大二学期个人自我评价
2014/01/13 职场文书
社区国庆节活动方案
2014/02/05 职场文书
农村门前三包责任书
2014/07/25 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server
详解Vue的列表渲染
2021/11/20 Vue.js
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers