小程序实现锚点滑动效果


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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
javascript中的几个运算符
Jun 29 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
javascript变量声明实例分析
Apr 25 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
发布一款npm包帮助理解npm的使用
Jan 03 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 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
php中in_array函数用法分析
2014/11/15 PHP
PHP 实现重载
2021/03/09 PHP
js动态设置div的值下例子
2013/10/29 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
纯JS实现轮播图
2017/02/22 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
python基础教程之序列详解
2014/08/29 Python
Python 通配符删除文件的实例
2018/04/24 Python
python 循环数据赋值实例
2019/12/02 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
英语教师岗位职责
2014/03/16 职场文书
碧霞祠导游词
2015/02/09 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL
Python读写yaml文件
2022/03/20 Python