微信小程序實現卡片層疊滑動
更新時間:2022年05月23日 16:59:36 作者:haicome
這篇文章主要為大家詳細介紹了微信小程序實現卡片層疊滑動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了微信小程序實現卡片層疊滑動的具體代碼,供大家參考,具體內容如下
實現效果:
1.左右滑動時,向相應方向移動一個卡片位置;
2.點擊某一項時,將點擊項位置移動到中間位置;
代碼如下:
wxml:
<view class="teachers_banner"> ? <view class="container clearfix teachers_b"> ? ? <view class="slide" id="slide" bindtouchstart='moveStart' bindtouchend='moveItem'> ? ? ? <ul> ? ? ? ? <block wx:for="{{datas}}"> ? ? ? ? ? <li animation="{{item.animation}}" ?style="z-index: {{item.zIndex}} ;opacity:{{item.opacity}};" ? ? ? ? ? ? bindtap="choose" data-id="{{item.id}}" ? ? ? ? ? > ? ? ? ? ? ? <image src="{{item.iamge}}" alt="林奇涵" title=""></image> ? ? ? ? ? </li> ? ? ? ? </block> ? ? ? </ul> ? ? </view> ? </view> </view>
css:
/* index/gun/jsSwiper2/jsSwiper2.wxss */ /*輪播圖片*/ .teachers_banner{ ? ? width:100%; ? ? height:575px; ? ? /* background: url(../images/teachers_banner.jpg) no-repeat center top; */ ? ? background-size: cover; ? ? ?position: relative; ? ? overflow: hidden; } .teachers_b{ ? position:relative; ? margin-top:130px; } #slide { ? ? margin: 0 auto; ? ? width: 100%; ? ? height: 330px; ? ? position: relative; ? } ? image{ ? ? width: 200rpx; ? ? height: 200rpx; ? } #slide li { ? ? position: absolute; ? ? width:200rpx; ? ? display: -webkit-box; ? ? display: -webkit-flex; ? ? display: flex; ? ? align-items: flex-start; ? ? -webkit-box-align: flex-start; ? ? -webkit-align-items: flex-start; ? ? background:#fff; ? ? overflow:hidden; ? ? box-shadow: 0 0 20px #1d374d; } #slide li img { ? ? width: 100%; ? ? height: 100%; } .slide_left{ ?/* width:240px;*/ } .slide_right{ ?/* width:440px;*/ ? padding: 40px; ? -webkit-box-flex: 1; ? ? -webkit-flex: 1; ? ? flex: 1; ? ? min-width: 0; } .slide_right h3{ font: 400 30px/18px "Microsoft Yahei"; color:#222222; } .slide_right h3 span{ ? display:inline-block; ? margin-left:10px; ? font: 400 14px/36px "Microsoft Yahei"; color:#555555; } .slide_right p{ ? padding:20px 0 30px; ? color:#555555; ? ? font: 400 14px/24px "Microsoft Yahei"; ? ? border-bottom: 1px solid #dbdbdb; } .slide_right dl{ ? padding-top:30px; } .slide_right dd{ ? float: left; ? width:33.3%; ? ?color:#777; ? ? font: 400 12px/24px "Microsoft Yahei"; } .slide_right dd h3{ color:#ff9000; margin-bottom:20px; } .arrow { ? ?/* display: none;*/ } .arrow .prev, .arrow .next { ? ? position: absolute; ? ? width: 64px; ? ? top: 38%; ? ? z-index: 9; ? ? font: 700 96px 'simsun'; ? ? opacity: 0.3; ? ? color: #fff; ? ? cursor: pointer; } .arrow .prev { ? ? /* left: -220px; */ } .arrow .next { ? ? /* right: -220px; */ } .arrow .prev:hover, .arrow .next:hover { ? ? color: #00a0e9; ? ? opacity: .7; }
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/teacher01.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 2, ? ? ? ? zIndex: 4, ? ? ? ? opacity: 0.4, ? ? ? ? left: 80, ? ? ? ? iamge: "../images/teacher02.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 3, ? ? ? ? zIndex: 6, ? ? ? ? opacity: 0.6, ? ? ? ? left: 120, ? ? ? ? iamge: "../images/teacher03.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 4, ? ? ? ? zIndex: 8, ? ? ? ? opacity:1, ? ? ? ? left: 160, ? ? ? ? iamge: "../images/teacher04.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 5, ? ? ? ? zIndex: 6, ? ? ? ? opacity: 0.6, ? ? ? ? left: 200, ? ? ? ? iamge: "../images/teacher05.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 6, ? ? ? ? zIndex: 4, ? ? ? ? opacity: 0.4, ? ? ? ? left: 240, ? ? ? ? iamge: "../images/teacher06.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ? { ? ? ? ? id: 7, ? ? ? ? zIndex: 2, ? ? ? ? opacity: 0.2, ? ? ? ? left: 280, ? ? ? ? iamge: "../images/7.jpg", ? ? ? ? animation: null ? ? ? }, ? ? ], ? ? order: [] ? }, ? /** ? ?* 生命周期函數--監(jiān)聽頁面加載 ? ?*/ ? onLoad: function(options) { ? ? this.__set__(); ? ? this.move(); ? }, ? /** ? ?* 生命周期函數--監(jiān)聽頁面初次渲染完成 ? ?*/ ? onReady: function() { ? }, ? /** ? ?* 生命周期函數--監(jiān)聽頁面顯示 ? ?*/ ? onShow: function() { ? }, ? /** ? ?* 生命周期函數--監(jiān)聽頁面隱藏 ? ?*/ ? onHide: function() { ? }, ? /** ? ?* 生命周期函數--監(jiān)聽頁面卸載 ? ?*/ ? onUnload: function() { ? }, ? /** ? ?* 頁面相關事件處理函數--監(jiān)聽用戶下拉動作 ? ?*/ ? onPullDownRefresh: function() { ? }, ? /** ? ?* 頁面上拉觸底事件的處理函數 ? ?*/ ? onReachBottom: function() { ? }, ? /** ? ?* 用戶點擊右上角分享 ? ?*/ ? onShareAppMessage: function() { ? }, ? move: function() { ? ? var datas = this.data.datas; ? ? /*圖片分布*/ ? ? for (var i = 0; i < datas.length; i++) { ? ? ? var data = datas[i]; ? ? ? var animation = wx.createAnimation({ ? ? ? ? duration:200 ? ? ? }); ? ? ? animation.translateX(data.left).step(); ? ? ? this.setData({ ? ? ? ? ["datas[" + i + "].animation"]: animation.export(), ? ? ? ? ["datas[" + i + "].zIndex"]: data.zIndex, ? ? ? ? ["datas[" + i + "].opacity"]: data.opacity, ? ? ? }) ? ? } ? }, ? /**左箭頭 */ ? left: function() { ? ? // ? ? var last = this.data.datas.pop(); //獲取數組的最后一個 ? ? this.data.datas.unshift(last);//放到數組的第一個 ? ? var orderFirst = this.data.order.shift(); ? ? this.data.order.push(orderFirst); ? ? this.move(); ? }, ? /** */ ? right: function() { ? ? var first = this.data.datas.shift(); //獲取數組的第一個 ? ? this.data.datas.push(first);//放到數組的最后一個位置 ? ? var orderLast = this.data.order.pop(); ? ? this.data.order.unshift(orderLast); ? ? this.move(); ? }, ? /**點擊某項 */ ? choose: function(e) { ? ? var that = this; ? ? var id = e.currentTarget.dataset.id; ? ? var order = that.data.order; ? ? var index = 0; ? ? for(var i = 0; i<order.length;i++){ ? ? ? if(id == order[i]){ ? ? ? ? index = i; ? ? ? ? break; ? ? ? } ? ? } ? ? if (index < that.data.iCenter) { ? ? ? for (var i = 0; i < that.data.iCenter - index; i++){ ? ? ? ? ? this.data.datas.push(this.data.datas.shift()); //獲取第一個放到最后一個 ? ? ? ? this.data.order.unshift(this.data.order.pop()); ?? ? ? ? ? // this.right() ? ? ? ? }? ? ? } else if (index > that.data.iCenter) { ? ? ? for (var i = 0; i < index - that.data.iCenter; i++) { ? ? ? ? this.data.datas.unshift(this.data.datas.pop()); //獲取最后一個放到第一個 ? ? ? ? this.data.order.push(this.data.order.shift()); ? ? ? ? // this.left(); ? ? ? } ? ? } ? ? this.move(); ? }, ? /**新的排列復制到新的數組中 */ ? __set__: function() { ? ? var that = this; ? ? var order = that.data.order; ? ? var datas = that.data.datas; ? ? for(var i = 0;i<datas.length;i++){ ? ? ? that.setData({ ? ? ? ? ["order["+i+"]"]:datas[i].id ? ? ? }) ? ? } ? }, ? //手指觸發(fā)開始移動 ? moveStart: function (e) { ? ? console.log(e); ? ? var startX = e.changedTouches[0].pageX; ? ? this.setData({ ? ? ? startX: startX ? ? }); ? }, ? //手指觸摸后移動完成觸發(fā)事件 ? moveItem: function (e) { ? ? console.log(e); ? ? var that = this; ? ? var endX = e.changedTouches[0].pageX; ? ? this.setData({ ? ? ? endX: endX ? ? }); ? ? //計算手指觸摸偏移劇距離 ? ? var moveX = this.data.startX - this.data.endX; ? ? //向左移動 ? ? if (moveX > 20) { ? ? ? this.left(); ? ? } ? ? if (moveX < -20) { ? ? ? this.right(); ? ? } ? }, })
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。