小程序实现锚点滑动效果


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 相关文章推荐
javascript函数作用域学习示例(js作用域)
Jan 13 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
javascript正则表达式使用replace()替换手机号的方法
Jan 19 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
javaScript知识点总结(必看篇)
Jun 10 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
LayUI数据接口返回实体封装的例子
Sep 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/04/09 国漫
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php使用百度天气接口示例
2014/04/22 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python文件操作整理汇总
2014/10/21 Python
python中Genarator函数用法分析
2015/04/08 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
机械个人求职信范文
2014/01/24 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书