小程序实现锚点滑动效果


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使用eval或者new Function进行语法检查
Oct 16 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
微信小程序之GET请求的实例详解
Sep 29 Javascript
angular.js实现购物车功能
Oct 23 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
js 将线性数据转为树形的示例代码
May 28 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 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
天津市收音机工业发展史
2021/03/04 无线电
如何使用PHP获取网络上文件
2006/10/09 PHP
用PHP将数据导入到Foxmail
2006/10/09 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
深入解析Python中的__builtins__内建对象
2016/06/21 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
软件测试工程师笔试题带答案
2015/03/27 面试题
入党自我鉴定范文
2013/10/04 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
教师学期末个人总结
2015/02/13 职场文书