小程序实现锚点滑动效果

要在小程序中实现锚点的话,就要用到<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
 })
 }, 

})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序 scroll-view实现锚点滑动的示例

    前言 最近开始做小程序,通读一遍文档再上手并不算难,但不得不说小程序里还是有一些坑.这里说一下如何实现页面锚点跳转,一个城市列表的效果示意图如下: 因为在微信小程序的环境中不能想在浏览器里设置标签,或者操作dom滚动,传统做法就行不通了,一切都得按小程序的文档来. 一开始我们的做法是使用boundingClientRect()方法获取每个锚点的坐标,然后再用wx.pageScrollTo()方法滑动过去.结果发现效果不是很好,因为boundingClientRect方法返回的每个点的坐标会随着屏

  • 微信小程序实现锚点定位楼层跳跃的实例

    微信小程序实现楼层锚点跳跃,点击不同的锚点进行位置跳跃: 利用:scroll-into-view 来实现 效果图如下: WXML: <scroll-view class="content" scroll-into-view="{{toView}}" scroll-y="true" scroll-with-animation="true"> <view wx:for="{{act_addList}}&

  • 小程序实现锚点滑动效果

    要在小程序中实现锚点的话,就要用到<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">

  • 微信小程序导航栏跟随滑动效果的实现代码

    效果图 .wxml <view class='tabBar'> <view class='tabItem wx:if="{{tabClick===0?"click":""}}"' bindtap='clickTab' data-index='0'>tab1</view> <view class='tabItem wx:if="{{tabClick===1?"click":&q

  • 微信小程序实现卡片层叠滑动效果

    本文实例为大家分享了微信小程序之卡片层叠滑动效果的具体代码,供大家参考,具体内容如下 代码: js: // index/gun/jsSwiper2/jsSwiper2.js Page({ /** * 页面的初始数据 */ data: { startX: 0, endX: 0, iCenter: 3, datas: [{ id: 1, zIndex: 2, opacity: 0.2, left: 40, iamge: "../../images/1.jpg", animation: nu

  • 小程序实现层叠卡片滑动效果

    小程序层叠卡片滑动效果,供大家参考,具体内容如下 效果图 wxml <!-- 轮播wxml代码 --> <view class="teachers_banner"> <view class="lunbo_center clearfix teachers_b"> <view class="slide" id="slide" bindtouchstart='moveStart' bindt

  • 微信小程序实现卡片左右滑动效果的示例代码

    快放假了,人狠话不多,啥也不说了.先看效果图. 思路 从上面的效果图来看,基本的需求包括: 左右滑动到一定的距离,就向相应的方向移动一个卡片的位置. 卡片滑动的时候有一定的加速度. 如果滑动距离太小,则依旧停留在当前卡片,而且有一个回弹的效果. 看到这样的需求,不熟悉小程序的同学,可能感觉有点麻烦.首先需要计算卡片的位置,然后再设置滚动条的位置,使其滚动到指定的位置,而且在滚动的过程中,加上一点加速度... 然而,当你查看了小程序的开发文档之后,就会发现小程序已经帮我们提前写好了,我们只要做相关

  • 小程序实现日历左右滑动效果

    本文实例为大家分享了小程序日历左右滑动效果的具体代码,供大家参考,具体内容如下 效果图 wxml <scroll-view class="scroll-view" scroll-left="{{scrollLeftIndex*itemWidth}}" scroll-x scroll-with-animation> <view class='item' style='width:{{itemWidth}}px' wx:for="{{date

  • 微信小程序基于movable-view实现滑动删除效果

    基于movable-view实现的一种较为完美的滑动删除效果 前言:用了很多去实现滑动删除的效果,都不太尽如人意,最后用小程序官方专用滑动组件来实现,但是这个组件有一点坑,咱们慢慢道来 1.wxml布局 <view class="list"> <view class="row" wx:for="{{list}}" wx:key="id"> <movable-area class="lis

  • 微信小程序实现锚点跳转

    本文实例为大家分享了微信小程序实现锚点跳转的具体代码,供大家参考,具体内容如下 1.先上效果图,看看是不是你想要的. 2.主要用到的微信小程序的scroll-view 组件实现该效果.核心主要是使用scroll-into-view属性跳转对应的标签页和标签内容区域和bindscroll事件监听标签内容区域距离页面顶部的距离来判断顶部的标签应该处于哪个标签. 3.wxml代码: <!-- start 标签区域 --> <view class="text" style=&

  • 小程序实现左滑删除效果

    本文实例为大家分享了小程序实现左滑删除效果的具体代码,供大家参考,具体内容如下 1.movable-area基本概念 实现思路: 大家仔细去看看官网的文档后再来看我写的这篇文章可能会更好理解. (1)movable-area这个就是定义了一个移动的区域,跟普通的<view></view>的含义是一样的,不同在于,接着往下看: 注意:movable-area 必须设置width和height属性,不设置默认为10px (2)movable-view这个就是一个可移动的视图容器,可以在

  • 微信小程序实现通过双向滑动缩放图片大小的方法

    本文实例讲述了微信小程序实现通过双向滑动缩放图片大小的方法.分享给大家供大家参考,具体如下: 在做小程序开发的过程中,后端传来一张图片地图,需要实现双手指滑动,使图片缩放,最终得出了一下代码: js : Page({ data: { touch: { distance: 0, scale: 1, baseWidth: null, baseHeight: null, scaleWidth: null, scaleHeight: null } }, touchStartHandle(e) { //

随机推荐