小程序实现锚点滑动效果


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 相关文章推荐
基于jquery的时间段实现代码
Aug 02 Javascript
jquery 简单应用示例总结
Aug 09 Javascript
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
javascript中DOM复选框选择用法实例
May 14 Javascript
AngularJs实现ng1.3+表单验证
Dec 10 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
微信JSAPI Ticket接口签名详解
Jun 28 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
Mar 13 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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与MySQL开发的8个技巧小结
2010/12/17 PHP
深入php list()函数的详解
2013/06/05 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
php内嵌函数用法实例
2015/03/20 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
PHP自定义错误用法示例
2016/09/28 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
Web开发之JavaScript
2012/03/29 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
交通事故调解协议书
2014/04/16 职场文书
小摄影师教学反思
2014/04/27 职场文书
工作鉴定评语
2014/05/04 职场文书
企业安全标语
2014/06/07 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书