小程序实现锚点滑动效果


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 相关文章推荐
arguments对象
Nov 20 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
浅谈JavaScript的闭包函数
Dec 08 Javascript
微信小程序 引入es6 promise
Apr 12 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
JS中的回调函数实例浅析
Mar 21 Javascript
Vue Router去掉url中默认的锚点#
Aug 01 Javascript
javascript实现导航栏分页效果
Jun 27 Javascript
JS实现时间校验的代码
May 25 Javascript
详解前端任务构建利器Gulp.js使用指南
Apr 30 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php上传文件的增强函数
2010/07/21 PHP
php获取参数的几种方法总结
2014/02/18 PHP
开启PHP的伪静态模式
2015/12/31 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
儿童编程python入门
2018/05/08 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
编写strcpy函数
2014/06/24 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
培训研修方案
2014/06/06 职场文书
写字楼租赁意向书
2014/07/30 职场文书
统计员岗位职责
2015/02/11 职场文书
nginx请求限制配置方法
2021/07/09 Servers