html
<view class="nav-top"> <view class="nav-top-div1 {{currentView==0?'active':''}}" data-typeCurrent='0' bindtap="bindtap">视频</view> <view class="nav-top-div2 {{currentView==1?'active':''}}" data-typeCurrent='1' bindtap="bindtap">推荐</view> <view class="nav-top-div3 {{currentView==2?'active':''}}" data-typeCurrent='2' bindtap="bindtap">直播</view> </view> <view class="cont"> <view class='mian' animation="{{animation}}"> <view class="mian-div1" bindtouchstart="touchStart" bindtouchend="touchEnd"> <swiper class="swiper2" vertical="true" > <block wx:for="{{background1}}" wx:key="*this"> <swiper-item> <view class="swiper-item {{item}}">{{item}}</view> </swiper-item> </block> </swiper> </view> <view class="mian-div2"> <swiper class="swiper2" bindchange='bindchange' bindanimationfinish='bindanimationfinish' current="{{page2current}}"> <block wx:for="{{background}}" wx:key="*this"> <swiper-item> <view class="swiper-item {{item}}">{{item}}</view> </swiper-item> </block> </swiper> </view> <view class="mian-div3" bindtouchstart="touchStart" bindtouchend="touchEnd"> <scroll-view scroll-y="true" style="height:100%" > <view id="demo1" class="scroll-view-item demo-text-1">2</view> <view id="demo2" class="scroll-view-item demo-text-2">3</view> <view id="demo3" class="scroll-view-item demo-text-3">4</view> </scroll-view> </view> </view> </view>
JS
// pages/swiper/index.js import tool from '../../utils/tool.js' Page({ /** * 页面的初始数据 */ data: { currentView:0,//默认显示第一个第div background1: ['视频模块div1', '视频模块div2', '视频模块div3'], background: ['demo-text-1', 'demo-text-2', 'demo-text-3'], page2current:0,//默认swiperitem isTotouch:0, animation:'' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this.animation = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) }, bindchange(e){ const {current, source}=e.detail; this.setData({ page2current:current }) }, bindanimationfinish(e){ if(this.data.page2current==2){ if(this.data.isTotouch==4){ var animation=this.animation; this.animation.left('-'+2*100+'vw').step() this.setData({ currentView:2, animation: animation.export() }) }else{ this.setData({ isTotouch:4 }) } }else if(this.data.page2current==0){ if(this.data.isTotouch==-1){ var animation=this.animation; this.animation.left(0).step() this.setData({ currentView:0, animation: animation.export() }) }else{ this.setData({ isTotouch:-1 }) } } }, touchStart(event) { this.startPageX = event.changedTouches[0].pageX; this.startPageY = event.changedTouches[0].pageY; }, touchEnd(event) { let currentX = event.changedTouches[0].pageX; let currentY = event.changedTouches[0].pageY; let tx = currentX - this.startPageX; let ty = currentY - this.startPageY; const maxPage = 2; let currentView=this.data.currentView; //左右方向滑动 if (Math.abs(tx) > Math.abs(ty)) { if (tx < 0) {//向左滑动 currentView = currentView !== maxPage ? currentView+ 1 : maxPage; }else if (tx > 0) { //向右滑动 currentView = currentView !== 0 ? currentView - 1 : 0; } var animation=this.animation; this.animation.left('-'+currentView*100+'vw').step() this.setData({ currentView:currentView, animation: animation.export() }); }else { if (ty < 0){ //向上滑动" } else if (ty > 0) { //向下滑动 } } //将当前坐标进行保存以进行下一次计算 this.startPageX = currentX; this.startPageY = currentY; }, bindtap(event){ const type=Number(event.currentTarget.dataset.typecurrent); var animation=this.animation; this.animation.left('-'+type*100+'vw').step() this.setData({ currentView:type, animation:animation.export() }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })
CSS
.mian{ position: absolute; height: 100%; left:0; top:0; 2260rpx; } .mian-div1{ 100vw; height: 100vh; background-color: #00ff00; float: left; } .mian-div2{ 100vw; height: 100vh; background-color: #00ff00; float: left; } .mian-div3{ 100vw; height: 100vh; background-color: #00ff00; float: left; } .swiper2{ 100%; height: 100%; } .nav-top{ position: absolute; top:20px; display: flex; 500rpx; left:0; z-index: 1; } .nav-top-div1,.nav-top-div2,.nav-top-div3{ flex:1; font-size: 30rpx; text-align: center; color:#000; } .nav-top-div1.active{ color:#ff0000; } .nav-top-div2.active{ color:#ff0000; } .nav-top-div3.active{ color:#ff0000; } .swiper-item{ text-align: center; 100%; padding-top:300rpx; font-size: 40rpx; } .scroll-view-item{ height: 600rpx; } .cont{ 100vw; height: 100vh; position: relative; overflow: hidden; }