小程序实现锚点滑动效果


Posted in Javascript onSeptember 23, 2019

要在小程序中实现锚点的话,就要用到<scroll-view > 标签中的,scroll-into-view,详情可见文档

wxml:

<view class='scroll-box' style='height:{{ht}}px;'>
 <scroll-view scroll-y class='menu-tab' scroll-into-view="{{toView}}" scroll-with-animation="true">
 <block wx:for="{{tabList}}" wx:key="">
 <view class='item-tab {{item.checked ? "item-act":""}}' id="t{{index}}" data-index="{{index}}" bindtap='intoTab'>{{item.title}}</view>
 </block>
 </scroll-view>
 
 <scroll-view scroll-y style='height:{{ht}}px;' 
 scroll-with-animation="true" 
 bindscrolltoupper="upper" 
 bindscrolltolower="lower" 
 bindscroll="scrollRight" 
 scroll-into-view="{{toViewRt}}">
 <block wx:for="{{contList}}" wx:key="">
 <view class='cont-box' id="t{{index}}" style='height:{{ht}}px;'>{{item.cont}}</view>
 </block>
 </scroll-view>
</view>

wxss:

.scroll-box{display: flex;flex-wrap: nowrap;}
.menu-tab{
 width: 180rpx;
 text-align: center;
 height: 100%;
 color: #666;
 border-right:1rpx solid #999
 
}
.item-tab{
 font-size:28rpx;
 padding:8rpx;
}
.cont-box{
 border-top: 1px solid;
 box-sizing: border-box;
}
.item-act{
 background: linear-gradient(to bottom right, #6C53B1 , #8B2EDF);
 color: #fff;
 border-radius: 100px;
}

js:

var app = getApp();
 
 
Page({
 data: {
 current: 0, 
 // 左侧菜单
 tabList: [
 { title: 'tab1', checked: true },
 { title: 'tab2', checked: false },
 { title: 'tab3', checked: false },
 { title: 'tab4', checked: false },
 { title: 'tab5', checked: false },
 { title: 'tab6', checked: false },
 
 ],
 // 右侧内容
 contList: [
 { cont: 'tab1'},
 { cont: 'tab2'},
 { cont: 'tab3'},
 { cont: 'tab4'},
 { cont: 'tab5'},
 { cont: 'tab6'},
 
 ],
 },
 
 // 循环切换
 forTab(index) {
 let lens = this.data.tabList.length;
 let _id = 't' + index;
 for (let i = 0; i < lens; i++) {
 this.data.tabList[i]['checked'] = false;
 }
 this.data.tabList[index]['checked'] = true;
 this.setData({
 tabList: this.data.tabList,
 toView: _id,
 current: index
 });
 },
 
 // 点击左侧菜单栏
 intoTab(e) {
 let lens = this.data.tabList.length;
 let _index = e.currentTarget.dataset.index;
 this.forTab(_index);
 let _id = 't' + _index;
 this.setData({
 toViewRt: _id
 });
 },
 
 // 滚动右侧菜单
 scrollRight(e) {
 //console.log(e)
 let _top = e.detail.scrollTop;
 let progress = parseInt(_top / this.data.ht); // 计算出 当前的下标
 if (progress > this.data.current) { // 向上拉动屏幕
 
 this.setData({ current: progress });
 this.forTab(this.data.current);
 } else if (progress == this.data.current) {
 return false;
 } else { // 向下拉动屏幕
 
 this.setData({
 current: progress == 0 ? 0 : progress--
 });
 this.forTab(progress);
 }
 },
 
 onLoad: function (options) {
 console.log(this.data.tabList)
 // 框架尺寸设置
 wx.getSystemInfo({
 success: (options) => {
 var wd = options.screenWidth; // 页面宽度
 var ht = options.windowHeight; // 页面高度
 this.setData({ wd: wd, ht: ht })
 }
 });
 },
 
 onShow: function () {
 // 初始化状态
 this.setData({
 toView: 't' + this.data.current,
 toViewRt: 't' + this.data.current
 })
 }, 
 
})

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

Javascript 相关文章推荐
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
Jun 19 Javascript
jquery 元素相对定位代码
Oct 15 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
js格式化时间小结
Nov 03 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
js+html制作简单验证码
Feb 16 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 #Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 #Javascript
node 文件上传接口的转发的实现
Sep 23 #Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 #Javascript
Electron 调用命令行(cmd)
Sep 23 #Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 #Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 #Javascript
You might like
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php面象对象数据库操作类实例
2014/12/02 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python学习小技巧之列表项的排序
2017/05/20 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
银行门卫岗位职责
2013/12/29 职场文书
简历的自我评价
2014/02/03 职场文书
中学生打架检讨书
2014/02/10 职场文书
计算机专业职业规划
2014/02/28 职场文书
高三高考决心书
2014/03/11 职场文书
门店业绩提升方案
2014/06/08 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
义诊活动通知
2015/04/24 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书