小程序实现锚点滑动效果


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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
简明json介绍
Sep 28 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
Dec 07 Javascript
js导航菜单(自写)简单大方
Mar 28 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
深入分析javascript中console命令
Aug 14 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
node后端服务保活的实现
Nov 10 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
人族 TERRAN 概述
2020/03/14 星际争霸
php error_log 函数的使用
2009/04/13 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
ECMAScript 创建自己的js类库
2012/11/22 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
深入理解javascript函数参数与闭包
2016/12/12 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
解析JavaScript模仿块级作用域
2016/12/29 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
几种响应式文字详解
2017/05/19 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
JavaScript创建表格的方法
2020/04/13 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python队列的定义与使用方法示例
2017/06/24 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
python制作图片缩略图
2019/04/30 Python
python三大神器之fabric使用教程
2019/06/10 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
个人作风建设心得体会
2014/10/22 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
实习护士自荐信
2015/03/25 职场文书