微信小程序实现点击导航标签滚动定位到对应位置


Posted in Javascript onNovember 19, 2020

本文要实现的是点击标签滚动定位到对应位置,且给在当前板块范围指定的导航标签添加样式

效果的话看下面GIF

微信小程序实现点击导航标签滚动定位到对应位置

wxml部分

top当前离顶部滚动的距离
block_ScrollTop是当前模块离顶部的距离,多减60是因为我的导航是悬浮的,会挡住部分内容,自行修改;
specify-style是我自定义选中标签时的样式,可自行更改;

<!-- 导航 -->
 <view class='nav' id="tab-con">
 <view class='resume-title'>伟安的简历</view>
 <view bindtap="toblock1" class="{{top<block2_ScrollTop-60?'specify-style':''}}">关于我</view>
 <view bindtap="toblock2" class="{{top>=block2_ScrollTop-60&&top<block3_ScrollTop-60?'specify-style':''}}">工作经验</view>
 <view bindtap="toblock3" class="{{top>=block3_ScrollTop-60?'specify-style':''}}">项目经验</view>
 </view>
 <!-- 中部内容 -->
 <view class="body">
 <scroll-view class="list" scroll-y="true" style="height:{{winHeight}}">
 <view id='block_1'>
 <!-- 第一个板块 -->
 </view>
 <view id='block_2'>
 <!-- 第二个板块 -->
 </view>
 <view id='block_3'>
 <!-- 第三个板块 -->
 </view>
 <view id='block_3'>
 <!-- 嗯,高度不够凑数的 -->
 </view>
 </scroll-view>
 </view>

wxss选中的字体加粗以及底部三角形样式参考

用了伪类::before画了三角形,板块没有内容所以加了高度。

.nav {
 display: flex;
 justify-content: space-around;
 align-items: center;
 height: 100rpx;
 background-color: rgba(0, 0, 0, 0.2);
 position: fixed;
 top: 0;
 left: 0;
 width: 100%;
 z-index: 9999;
}

.specify-style {
 font-weight: 800;
 position: relative;
}

.specify-style::before {
 content: '';
 border: solid transparent;
 border-width: 0px 14rpx 14rpx 14rpx;
 border-bottom-color: snow;
 position: absolute;
 z-index: 1000;
 margin-top: 36rpx;
 left: 37%;
}

#block_1,
#block_2,
#block_3 {
 height: 70vh;
}

#block_1 {
 background-color: aqua;
}

#block_2 {
 background-color: bisque;
}

#block_3 {
 background-color: cadetblue;
}

js部分

先是在onLoad中拿到自适应winHeight赋值到scroll-view组件;
然后通过createSelectorQuery方法获取顶部id、板块一id、板块二id、板块三id离顶部的距离;
然后通过onPageScroll方法时时监听获取当前位置离顶部滚动的距离;
然后通过pageScrollTo实现点击跳转定位;

Page({
 data: {
 //当前离顶部滚动的距离
 top: 0,
 },
 // 监听滚动事件 scrollTop 滚动的距离
 onPageScroll: function (e) { // 获取滚动条当前位置
 // console.log(e)
 this.setData({
 top: e.scrollTop
 })
 if (e.scrollTop > this.data.tabScrollTop) {
 this.setData({
 tabFixed: true
 })
 // console.log("我锁定了")
 } else {
 this.setData({
 tabFixed: false
 })
 }
 },
 //点击跳转到板块一
 toblock1: function () {
 wx.pageScrollTo({
 /*
 *多减50是因为我的导航是悬浮的,会挡住部分内容
 *这里是1等于2rpx
 */
 scrollTop: this.data.block1_ScrollTop - 50
 })
 },
 //点击跳转到板块二
 toblock2: function () {
 wx.pageScrollTo({
 scrollTop: this.data.block2_ScrollTop - 50
 })
 },
 //点击跳转到板块三
 toblock3: function () {
 wx.pageScrollTo({
 scrollTop: this.data.block3_ScrollTop - 50
 })
 },
 onLoad: function (options) {
 let that = this
 // 高度自适应
 wx.getSystemInfo({
 success: function (res) {
 var clientHeight = res.windowHeight,
  clientWidth = res.windowWidth,
  rpxR = 750 / clientWidth;
 var calc = clientHeight * rpxR;
 that.setData({
  winHeight: calc
 });
 }
 });
 var query = wx.createSelectorQuery()
 //获取顶部的距离
 query.select('#tab-con').boundingClientRect(function (res) {
 var top = res.top;
 if (top == null) {
 var top = 0;
 }
 that.setData({
 tabScrollTop: top
 })
 }).exec()
 //获取板块一离顶部的距离
 query.select('#block_1').boundingClientRect(function (res) {
 that.setData({
 block_1ScrollTop: res.top
 })
 }).exec()
 //获取板块二离顶部的距离
 query.select('#block_2').boundingClientRect(function (res) {
 that.setData({
 block2_ScrollTop: res.top
 })
 }).exec()
 //获取板块三离顶部的距离
 query.select('#block_3').boundingClientRect(function (res) {
 that.setData({
 block3_ScrollTop: res.top
 })
 }).exec()
 },
})

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js函数般调用正则
Apr 08 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
JavaScript计算正方形面积
Nov 26 Javascript
微信小程序点击item使之滚动到屏幕中间位置
Mar 25 Javascript
vue项目中自定义video视频控制条的实现代码
Apr 26 Javascript
深入了解Vue3模板编译原理
Nov 19 #Vue.js
微信小程序实现倒计时功能
Nov 19 #Javascript
微信小程序实现列表左右滑动
Nov 19 #Javascript
详解JavaScript 中的批处理和缓存
Nov 19 #Javascript
Javascript中window.name属性详解
Nov 19 #Javascript
JavaScript实现图片合成下载的示例
Nov 19 #Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 #Vue.js
You might like
基于mysql的论坛(6)
2006/10/09 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
python开发之thread线程基础实例入门
2015/11/11 Python
Python命令行解析模块详解
2018/02/01 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python 列表推导式使用详解
2019/08/29 Python
Python 使用多属性来进行排序
2019/09/01 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
大三自我鉴定范文
2013/10/05 职场文书
表决心的诗句大全
2014/03/11 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
司机岗位职责范本
2015/04/10 职场文书
跑出一片天观后感
2015/06/08 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书