接上篇文章:https://www.cnblogs.com/ligulalei/p/10622778.html
在上篇文章中实现了通过使用scrollIntoView()在使用vux的移动端实现了点击锚点进行页面dom定位,但是这个demo在ios中运行存在兼容性问题,滑动页面时使用position:absolute定位的dom会出现跳动现象,待有时间再解决这个bug。
好了,开始本篇内容部分:
本篇内容是在上篇内容的基础上二次开发而来,实现了双向定位,当页面上下滑动到某个位置时,对应的锚点会出现高亮。看一下运行效果,还阔以吧~

为了把这个问题说清楚,我下面分4个小节分别介绍
1.找到定位坐标
在vue中使用scrollTop这个属性总是失败的很彻底,所以这次压根就不在考虑使用这个玩意儿。我首先在需要滑动的内容区域找到一个定位坐标,这个参考坐标需要满足两点要求:
①这个坐标需要可以在页面中上下滑动
这个坐标需要在滑动的内容区域
②这个坐标需要有个id
通过这个id,在滑动过程中可以实时监听到这个坐标滑动到的位置,当然也可以不是id,只要能得到这个dom就行
我在这个demo中选择的定位坐标是 id="apply1" 的div

<div
id="apply1"
style=" position: relative;top: -120px;display: block;height: 60;overflow: hidden;"
></div>

找到定位坐标,下面就开始监听页面滚动了,通过滚动页面我们看看这个定位坐标的变化值。

2.监听页面滚动
监听事件写在 mounted 中,至于为什么写在这里自行去了解

mounted() {
window.addEventListener("scroll", this.handleScroll, true);
},

这里触发了handleScroll()事件,这个事件定义在methods:中

methods: {
handleScroll(el) {
},
},

3.坐标位置计算

通过在页面滚动过程中,实时计算得到定位坐标点相对于可视屏幕顶部的高度值
代码如下:

handleScroll(el) {
let _pos = document.getElementById("apply1").getBoundingClientRect().top;
console.log('top',_pos);
},

在浏览器中运行一下,看能不能正常得到这个值:

可以看到这个值根据页面的滚动在实时变化,ok~到这里就是万事俱备,只欠东风了。
我们只要的到这个值,通过计算值的区域范围就可以给锚点进行高亮显示了。
此外我还想再多说两句,在这里我用到了这个方法:getBoundingClientRect()
这个方法在这里做么子内?

Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。
浏览器兼容行:

参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect
4.锚点高亮效果
通过得到的这个值,接下来怎么进行锚点高亮,我想你应该知道了吧。
下面是我这个demo中使用的高亮方法

methods: {
handleScroll(el) {
let _pos = document.getElementById("apply1").getBoundingClientRect().top;
if (-88 < _pos) {
this.appleNumber = 1;
}
if (_pos < -150) {
this.appleNumber = 2;
}
if (_pos < -300) {
this.appleNumber = 3;
}
if (_pos < -460) {
this.appleNumber = 4;
}
if (_pos < -780) {
this.appleNumber = 5;
}
if (_pos < -930) {
this.appleNumber = 6;
}
if (_pos < -1090) {
this.appleNumber = 7;
}
if (_pos < -1130) {
this.appleNumber = 8;
}
},
},

锚点html代码:

<div style=" width: 100%;z-index: 2; position: absolute;margin-top: -10px;">
<tab bar-active-color="#10aeff">
<tab-item :selected="1==appleNumber">
<a @click="jump(1)">锚点定位一</a>
</tab-item>
<tab-item :selected="2==appleNumber">
<a @click="jump(2)">锚点定位二</a>
</tab-item>
<tab-item :selected="3==appleNumber">
<a @click="jump(3)">锚点定位三</a>
</tab-item>
<tab-item :selected="4==appleNumber">
<a @click="jump(4)">锚点定位四</a>
</tab-item>
<tab-item :selected="5==appleNumber">
<a @click="jump(5)">锚点定位五</a>
</tab-item>
<tab-item :selected="6==appleNumber">
<a @click="jump(6)">锚点定位六</a>
</tab-item>
<tab-item :selected="7==appleNumber">
<a @click="jump(7)">锚点定位七</a>
</tab-item>
<tab-item :selected="8==appleNumber">
<a @click="jump(8)">锚点定位八</a>
</tab-item>
</tab>
</div>

划个重点:

1.选取定位坐标
2.监听页面滚动,获取定位坐标相对于屏幕顶部的高度值
3.高亮效果触发

vue+vux页面滚动定位(支持上下滑动)的更多相关文章

  1. Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)

    Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...

  2. vue+vux scrollTop无法实现定位到具体dom

    先看一下最终的运行效果. 项目背景介绍:技术栈: vue+vux+nodejs需求:对汽车品牌列表可以按照字母进行索引定位 在开发中实现这种需求,心想还不是小菜一碟,作为一个饱经bug的程序员,别的我 ...

  3. vue进入页面时不在顶部,检测滚动返回顶部按钮

    这里是本小白使用时遇到的问题及个人使用的方法可能并不完美. 1.监测浏览器滚动条滚动事件及滚动距离 dmounted() { window.addEventListener("scroll& ...

  4. vue中监听页面滚动和监听某元素滚动

    ①监听页面滚动 在生命周期mounted中进行监听滚动: mounted () { window.addEventListener('scroll', this.scrollToTop) }, 在方法 ...

  5. scrollreveal(页面滚动显示动画插件支持手机)

    scrollreveal.js是一款可以轻易实现桌面和移动浏览器元素随页面滚动产生动画的js插件.该插件通过配置可以在页面滚动,元素进入视口时产生炫酷的动画效果,同时还支持元素的3D效果,非常的实用. ...

  6. Javascript实现页面滚动时导航智能定位

    遇到的问题: 在做官网的时候,需要滚动定位的区块的图片不确定,无法确定用户浏览区域对应的模块导航 之前的解决方案是: 通过定位滚动条的位置来判断用户浏览区域对应的模块导航,这种方法的弊端是,区块的高度 ...

  7. vue 中监听页面滚动

    监听页面滚动 在methods中定义一个方法 handleScroll() { //获取滚动时的高度 let scrollTop = window.pageYOffset || document.do ...

  8. vue中判断页面滚动开始和结束

    参考链接:https://www.jianshu.com/p/adad39705ced    和  https://blog.csdn.net/weixin_44309374/article/deta ...

  9. jquery页面滚动显示浮动菜单栏锚点定位效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. 常用Java技术社区

      Java生态圈知识链: 求职平台 阿里巴巴社招平台 杭州网易社招平台 微店社招平台 银联社招平台 百度社招平台 Java生态圈知识链: 个人优秀博客 腾讯_运维工程师_刘天斯 阿里_Android ...

  2. windows 下使用 protobuf

    下载protobuf 下载地址:https://github.com/google/protobuf/releases 选择protoc-xxx-win32.zip下载 配置环境变量 将解压出来的pr ...

  3. linux架构师之路!

    目录 1.shell编程总结 2.python编程总结 3.网络基础总结 4.存储的基本知识 5.linux常用 架构学习目录 1.网站架构 2.架构师技术图谱 3.python之路 4.IBM技术主 ...

  4. Google Colab Free GPU Tutorial【转载】

    转自:https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d 1.Google Cola ...

  5. 使用 js,自己写一个简单的滚动条

    当我们给元素加上 overflow: auto;  的时候,就会出现滚动条,然而浏览的不同,滚动条的样式大不一样,有些甚至非常丑. 于是就想着自己写一个滚动条,大概需要弄清楚一下这几个点: 1.滚动条 ...

  6. IR2104s半桥驱动使用经验

    多次使用IR2104s,每次的调试都有种让人吐血的冲动.现在将使用过程遇到的错误给大家分享一下,方便大家找到思路. 一.自举电容部分(关键) 1.听说自举电路必须要安装场效应管,于是我在使用过程中,安 ...

  7. js常用的400个特效

    JavaScript实现可以完全自由拖拽的效果,带三个范例     http://www.sharejs.com/showdetails-501.aspx javascript实现可以自由拖动的树形列 ...

  8. vue国际化

    插件:vue-i18n main.js引入i18n.js:+2行 新建文件(i18n.js),引入VueI18n.locale.语言包 新建语言包,包括index/zh/en(名字随意,引用正确就好) ...

  9. elasticsearch开机启动脚本

    最近搭建了一个elasticsearch服务,其中机器重启而ES服务没有重启是问题,就有下面的脚本 #!/bin/sh #chkconfig: #description: es export JAVA ...

  10. 畅捷通T+12.2升级时发生的错误及处理方法图解

    前言:最近处理一个客户单位的财务数据,需要从2004年的U820版本的数据升级到畅捷通T+12.2版本.经查,该升级先要将原数据升级到T6,再从T6升级到畅捷通T+12.2版本.U820升级到T6很简 ...