小程序实现锚点滑动效果


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程序员的输入验证
Oct 06 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
javascript加号&quot;+&quot;的二义性说明
Mar 04 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
Angular CLI 安装和使用教程
Sep 13 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
微信小程序中为什么使用var that=this
Aug 27 Javascript
VuePress 中如何增加用户登录功能
Nov 29 Javascript
微信小程序实现多行文字滚动
Nov 18 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.ini实现PHP文件上传功能
2014/11/27 PHP
19个Android常用工具类汇总
2014/12/30 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python pickle模块用法实例分析
2015/05/27 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
优质的学校老师推荐信
2013/10/28 职场文书
大学生职业生涯规划范文
2014/01/08 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
少儿节目主持串词
2014/04/02 职场文书
房产授权委托书范本
2014/09/22 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
安全检查汇报材料
2014/12/26 职场文书
教师个人教学总结
2015/02/11 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
公司会议开幕词
2016/03/03 职场文书