小程序实现锚点滑动效果


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乱码与contentType属性设置问题解决方案
Jan 07 Javascript
解析prototype,JQuery中跳出each循环的方法
Dec 12 Javascript
javascript中style.left和offsetLeft的用法说明
Mar 07 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 Javascript
leaflet的开发入门教程
Nov 17 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 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性能的21种方法介绍
2013/06/25 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
python关闭windows进程的方法
2015/04/18 Python
python实现连接mongodb的方法
2015/05/08 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
在双python下设置python3为默认的方法
2018/10/31 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
python实现狄克斯特拉算法
2019/01/17 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
工作态度检讨书
2014/02/11 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
正科级干部考察材料
2014/05/29 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python