小程序实现实现tab-control停留效果—————(2020.1.11学习笔记)

这次实现的tab-control停留效果如下图
在这里插入图片描述
要实现停留效果,必须先自定义一个tab-control组件,这里实现tab-control的详细流程请看这个我2019.12.23的学习笔记(https://blog.csdn.net/qq_37704442/article/details/103674433)
,然后在要实现效果的页面对应的wxml文件上,引用两个自定义tab-control组件,一个使用一个值为false的变量隐藏起来,另一个使用该变量的取反值,这样两个自定义tab-control组件就不会同时出现了,然后使用onPageScroll函数监听用户下滑深度,下滑触发的深度是在图片加载完后,顶端与固定自定义tab-control组件的距离,为了计算距离,先在一个tab-control组件上声明id属性为"tab-control",然后使用select计算距离,为了实现即时计算,这个放在页面onShow函数触发1000毫秒之后执行,最后利用计算好的距离,在用户下滑到对应的触发深度之后,固定的tab-control组件隐藏,然后起初隐藏的另一个tab-control组件,转为显示状态,并使用之前声明好的样式,让显示的tab-control组件浮在上方,以上就是实现tab-control停留效果的主要思路了,接下来就是实现代码阶段
在对应页面wxml文件上的代码(如下)

<My_Tab list_titles="{{titles}}" id="tab-control"  binditemclick="handleTabClick" class="{{isTabFixed?'fixed':''}}"></My_Tab>
<My_Tab list_titles="{{titles}}" wx:if="{{isTabFixed}}"></My_Tab>

在JS文件上的代码(如下)

 data: {
isTabFixed:false,
}onShow() {
    
      setTimeout(()=>{
        wx.createSelectorQuery().select('#tab-control').boundingClientRect(rect=>{
         this.data.tabScrollTop=rect.top
        }).exec()
      },1000)
  },
  onPageScroll(options)
  {
    const scrollTop=options.scrollTop;
    const flag1= scrollTop >= TOP_DISTANCE;
    if(flag1!=this.data.showBackTop)
    {
      this.setData(
        {
          showBackTop:flag1
        }
      )
    }
    const flag2=scrollTop >=this.data.tabScrollTop;
    if(flag2!=this.data.isTabFixed)
    {
      this.setData(
        {
          isTabFixed:flag2
        }
      )
    }
  },

触发之后使用的样式(如下)

.fixed{
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现el-tab-pane拖拽排序的步骤如下: 1. 安装sortablejs和@vue/composition-api ``` npm install sortablejs @vue/composition-api --save ``` 2. 在Vue组件中导入Sortable和reactive ```javascript import Sortable from 'sortablejs'; import { reactive } from '@vue/composition-api'; ``` 3. 创建一个响应式对象来存储tab列表 ```javascript const tabs = reactive({ list: [ { label: 'Tab 1', content: 'Content of Tab 1' }, { label: 'Tab 2', content: 'Content of Tab 2' }, { label: 'Tab 3', content: 'Content of Tab 3' } ] }); ``` 4. 在页面中使用el-tabs和el-tab-pane组件来展示tab列表,并使用v-for指令循环展示tab列表 ```html <el-tabs v-model="activeTab"> <el-tab-pane v-for="(tab, index) in tabs.list" :key="index" :label="tab.label"> {{ tab.content }} </el-tab-pane> </el-tabs> ``` 5. 在mounted钩子函数中使用Sortable创建可拖拽的tab列表,并监听其排序事件 ```javascript mounted() { let el = this.$el.querySelector('.el-tabs__nav-wrap'); new Sortable(el, { animation: 150, onEnd: (evt) => { let fromIndex = evt.oldIndex; let toIndex = evt.newIndex; tabs.list.splice(toIndex, 0, tabs.list.splice(fromIndex, 1)[0]); } }); } ``` 6. 完成后,你就可以在页面上看到一个可拖拽排序的tab列表了。 完整代码如下: ```html <template> <el-tabs v-model="activeTab"> <el-tab-pane v-for="(tab, index) in tabs.list" :key="index" :label="tab.label"> {{ tab.content }} </el-tab-pane> </el-tabs> </template> <script> import Sortable from 'sortablejs'; import { reactive } from '@vue/composition-api'; export default { name: 'SortableTabs', setup() { const tabs = reactive({ list: [ { label: 'Tab 1', content: 'Content of Tab 1' }, { label: 'Tab 2', content: 'Content of Tab 2' }, { label: 'Tab 3', content: 'Content of Tab 3' } ] }); return { tabs }; }, mounted() { let el = this.$el.querySelector('.el-tabs__nav-wrap'); new Sortable(el, { animation: 150, onEnd: (evt) => { let fromIndex = evt.oldIndex; let toIndex = evt.newIndex; this.tabs.list.splice(toIndex, 0, this.tabs.list.splice(fromIndex, 1)[0]); } }); } }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值