微信小程序-锚点定位+内容滑动控制导航选中

news/2024/7/7 21:45:22

之前两篇文章分别介绍了锚点定位和滑动内容影响导航选中,这里我们就结合起来,实现这两个功能!

思路不再多说,直接上干货!

WXML

<view class="navigateBox"><view class="title"><image wx:if="{{actionView=='productBox'}}" src="../images/position.png"/><view class="title {{actionView=='productBox' ? 'checked':''}}" bindtap="toViewClick" data-hash="productBox">商品</view></view><view class="title"><image wx:if="{{actionView=='commentBox'}}" src="../images/position.png"/><view class="title {{actionView=='commentBox' ? 'checked':''}}" bindtap="toViewClick" data-hash="commentBox">评价</view></view><view class="title"><image wx:if="{{actionView=='infoBox'}}" src="../images/position.png"/><view class="title {{actionView=='infoBox' ? 'checked':''}}" bindtap="toViewClick" data-hash="infoBox">详情</view></view>
</view><scroll-view style="height:{{winHeight}}" scroll-into-view="{{toView}}" scroll-y="true" bindscroll="scrollTo"><view id="productBox" class="content">商品信息...</view><view id="commentBox" class="content">评价内容...</view><view id="infoBox" class="content">商品详情...</view>
</scroll-view>
复制代码

WXS

data: {winHeight: '100%',toView: 'productBox',//锚点跳转的IDactionView: 'productBox',//控制导航显示productBoxTop: 0,//商品模块距离顶部的距离commentBoxTop: 0,//评价模块距离顶部的距离infoBoxTop: 0,//详情模块距离顶部的距离
};onLoad() {let that = this;wx.getSystemInfo({success: function (res) {//屏幕的宽度/屏幕的高度 = 微信固定宽度(750)/微信高度that.setData({winHeight = res.windowHeight-(res.windowWidth*90/750)+'px'  })}});
}onShow() {// 获取各模块距离顶部的距离new Promise(resolve => {let query = wx.createSelectorQuery();query.select('#productBox').boundingClientRect();query.select('#commentBox').boundingClientRect();query.select('#infoBox').boundingClientRect();query.exec(function (res) {resolve(res);});}).then(res => {this.setData({productBoxTop: res[0].top,commentBoxTop: res[1].top,infoBoxTop: res[2].top});});
}//锚点定位
toViewClick(e) {this.setData({toView: e.target.dataset.hash,  actionView: e.target.dataset.hash})
},scrollTo(e){let scrollTop = e.detail.scrollTop+100;  //滚动的Y轴if(scrollTop >= this.infoBoxTop){this.setData({actionView: 'infoBox'    })}else if(scrollTop >= this.commentBoxTop){this.setData({actionView: 'commentBox'  })}else {this.setData({actionView: 'productBox'  })}//this.$apply();//WEPY更新数据
}复制代码

WXSS

page {height: 100%;
}
.navigateBox {background: #fff;height: 80rpx;padding: 0 100rpx;margin-bottom: 10rpx;
}
.navigateBox .title {margin: 20rpx 46rpx;float: left;font-size: 27rpx;width: 60rpx;padding-left: 30rpx;
}
.navigateBox .title .right {float: right;margin-top: -5rpx;
}
.navigateBox image {width: 30rpx;height: 30rpx;margin-left: -30rpx;
}
.navigateBox .checked {color: #f73c3c;
}
.content {height: 1000rpx;
}
复制代码

http://lihuaxi.xjx100.cn/news/244311.html

相关文章

页面与ViewModel(上)

在UWP淘宝与旺信中&#xff0c;笔者主要负责页面与控件的制作&#xff0c;这些工作看似简单&#xff0c;但要想做的全面细致仍然需要深入的思考。本文想分享一些在UWP旺信的制作过程中&#xff0c;笔者在UI页面与控件制作上体会到的一些心得。可能笔者的有些方法并不见得高明&a…

IDEA2020如何设置全局maven路径

个人免费资源分享网站&#xff1a;http://xiaocaoshare.com/ File —> New Prijects Settings —> Setting for New Projects…

预示敏捷方法走偏的15个标志——第1部分

2019独角兽企业重金招聘Python工程师标准>>> 【编者按】误解和“最佳实践”可能会让你的团队原地打转&#xff0c;无法高效产出代码。本文主要介绍预示着敏捷方法走偏的15个标志&#xff0c;作者为 Steven A. Lowe。文章系国内 ITOM 管理平台 OneAPM 编译呈现。 要赶…

nginx的安装和使用(一)

个人免费资源分享网站&#xff1a;http://xiaocaoshare.com/ 1.下载安装nginx,启动 点击的时候可能一闪而过&#xff0c;这个不影响&#xff0c;直接在浏览器上输入locahost,出现以下页面说明安装成功 如果要把项目部署到nginx&#xff0c;先找到conf下的nginx.conf文件 因为修…

plsql 导入导出表、数据、序列、视图

&#xfeff;&#xfeff;一、导出&#xff1a; 1、打开plsql-->工具----》导出用户对象(可以导出表结构和序列、视图) ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有者&#xff0c; 这样就可以将A所有者的表结构等导入到B所有者的表空间中 2、…

41.国际化

转自&#xff1a;https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 尽管国际化不是重点内容&#xff0c;但是也有必要了解它的使用。在struts2中国际化有三种级别&#xff1a;分别是针对某个Action的action级别&#xff0c;针对package的package级别&#xff0c;针…

IDEA如何导入多个maven依赖的项目

个人网站&#xff1a;http://xiaocaoshare.com/ 1.file->open找到文件的路径导入 导入进来的只是以文件夹形式&#xff0c;需要在project Structure再次导入 设置项目jdk 导入依赖的maven项目&#xff0c;先导入父工程 导入完之后对应的工程发生改变 同理&#xff0c;依次…

Js----闭包

1、闭包的概念&#xff1a;(我找了很多&#xff0c;看大家的理解) A:闭包是指可以包含自由&#xff08;未绑定到特定对象&#xff09;变量的代码块&#xff1b; 这些变量不是在这个代码块内或者任何全局上下文中定义的&#xff0c;而是在定义代码块的环境中定义&#xff08;局部…