微信小程序?qū)崿F(xiàn)長按拖拽排序功能
更新時間:2022年05月23日 17:17:36 作者:haicome
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)長按拖拽排序功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
工作中遇到一個上傳圖片長按后拖動排序的一個功能,于是寫下了一個小demo。希望能對你有遇到的問題有幫助。
演示效果:
wxml
<view class='outer' > ? <view class='inner'> ? ? <movable-area> ? ? ? <block wx:for="{{data}}"> ? ? ? ? <view class='item' ?id="{{item.index}}" data-index='{{index}}' bindlongpress='_longtap' bindtouchstart='touchs' bindtouchend='touchend' bindtouchmove='touchm'> ? ? ? ? ? <text>{{item.index}}</text> ? ? ? ? </view> ? ? ? </block> ? ? ? <movable-view x="{{x}}" y="{{y}}" direction="all" damping="{{5000}}" friction="{{1}}" disabled="{{disabled}}"> ? ? ? ? <view class='item-move' hidden='{{hidden}}'> ? ? ? ? </view> ? ? ? </movable-view> ? ? </movable-area> ? </view> </view>
js
// test/test.js Page({ ? /** ? ?* 頁面的初始數(shù)據(jù) ? ?*/ ? data: { ? ? hidden:true, ? ? flag:false, ? ? x:0, ? ? y:0, ? ? data:[{index:1}, ? ? ? { index: 2 }, ? ? ? { index: 3 }, ? ? ? { index: 4 }, ? ? ? { index: 5 }, ? ? ? { index: 6 }, ? ? ? { index: 7 }, ? ? ], ? ? disabled: true, ? ? elements:[] ? }, ? /** ? ?* 生命周期函數(shù)--監(jiān)聽頁面加載 ? ?*/ ? onLoad: function (options) { ? ?? ? ? ? var query = wx.createSelectorQuery(); ? ? ? var nodesRef = query.selectAll(".item"); ? ? ? nodesRef.fields({ ? ? ? dataset: true, ? ? ? rect:true ? ? ?? ? ? },(result)=>{ ? ? ? ? this.setData({ ? ? ? ? ? elements: result ? ? ? ? }) ? ? ? ? }).exec() ? }, ? /** ? ?* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成 ? ?*/ ? onReady: function () { ?? ? }, ? /** ? ?* 生命周期函數(shù)--監(jiān)聽頁面顯示 ? ?*/ ? onShow: function () { ?? ? }, ? /** ? ?* 生命周期函數(shù)--監(jiān)聽頁面隱藏 ? ?*/ ? onHide: function () { ?? ? }, ? /** ? ?* 生命周期函數(shù)--監(jiān)聽頁面卸載 ? ?*/ ? onUnload: function () { ?? ? }, ? /** ? ?* 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作 ? ?*/ ? onPullDownRefresh: function () { ?? ? }, ? /** ? ?* 頁面上拉觸底事件的處理函數(shù) ? ?*/ ? onReachBottom: function () { ?? ? }, ? /** ? ?* 用戶點擊右上角分享 ? ?*/ ? onShareAppMessage: function () { ?? ? }, ? //長按 ? _longtap:function(e){ ? ? const detail = e.detail; ? ? this.setData({ ? ? ? x: e.currentTarget.offsetLeft, ? ? ? y: e.currentTarget.offsetTop ? ? }) ? ? this.setData({ ? ? ? hidden: false, ? ? ? flag:true ? ? }) ? }, ? //觸摸開始 ? touchs:function(e){ ? ? this.setData({ ? ? ? beginIndex:e.currentTarget.dataset.index ? ? }) ? }, ? //觸摸結(jié)束 ? touchend:function(e){ ? ? if (!this.data.flag) { ? ? ? return; ? ? } ? ? const x = e.changedTouches[0].pageX ? ? const y = e.changedTouches[0].pageY ? ? const list = this.data.elements; ? ? let data = this.data.data ? ? for(var j = 0; j<list.length; j++){ ? ? ? const item = list[j]; ? ? ? if(x>item.left && x<item.right && y>item.top && y<item.bottom){ ? ? ? ? const endIndex = item.dataset.index; ? ? ? ? const beginIndex = this.data.beginIndex; ? ? ? ? //向后移動 ? ? ? ? if (beginIndex < endIndex) { ? ? ? ? ? let tem = data[beginIndex]; ? ? ? ? ? for (let i = beginIndex; i < endIndex; i++) { ? ? ? ? ? ? data[i] = data[i + 1] ? ? ? ? ? } ? ? ? ? ? data[endIndex] = tem; ? ? ? ? } ? ? ? ? //向前移動 ? ? ? ? if (beginIndex > endIndex) { ? ? ? ? ? let tem = data[beginIndex]; ? ? ? ? ? for (let i = beginIndex; i > endIndex; i--) { ? ? ? ? ? ? data[i] = data[i - 1] ? ? ? ? ? } ? ? ? ? ? data[endIndex] = tem; ? ? ? ? } ? ? ? ? this.setData({ ? ? ? ? ? data: data ? ? ? ? }) ? ? ? } ? ? } ? ? this.setData({ ? ? ? hidden: true, ? ? ? flag: false ? ? }) ? }, ? //滑動 ? touchm:function(e){ ? ? if(this.data.flag){ ? ? ? const x = e.touches[0].pageX ? ? ? const y = e.touches[0].pageY ? ? ? this.setData({ ? ? ? ? x: x - 75, ? ? ? ? y: y - 45 ? ? ? }) ? ? } ? } })
wxss
/* test/test.wxss */ .outer{ ? width: 650rpx; ? height: 400rpx; ? border: 1px solid red; ? margin: 0 auto; } .inner{ ? width: 100%; ? height: 100%; } movable-area{ ? width: 100%; ? height: 100%; } .item{ ? display: inline-block; ? width: 150rpx; ? height: 150rpx; ? border: 1px solid red; ? text-align: center; ? line-height: 150rpx; } .index-first{ ? display: inline-block; ? width: 15rpx; ? height: 150rpx; ? background: firebrick; } .item-move{ ? display: inline-block; ? width: 150rpx; ? height: 150rpx; ? border: 1px solid blue; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于JavaScript 性能優(yōu)化技巧心得(分享)
下面小編就為大家分享一篇基于JavaScript 性能優(yōu)化技巧心得,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12JavaScript判斷頁面加載完之后再執(zhí)行預(yù)定函數(shù)的技巧
這篇文章主要介紹了JavaScript判斷頁面加載完之后再執(zhí)行預(yù)定函數(shù)的技巧,原理還是利用監(jiān)聽器監(jiān)聽元素事件、被觸發(fā)則執(zhí)行函數(shù),需要的朋友可以參考下2016-05-05JS實現(xiàn)獲取當(dāng)前所在周的周六、周日示例分析
這篇文章主要介紹了JS實現(xiàn)獲取當(dāng)前所在周的周六、周日,結(jié)合具體實例形式分析了javascript針對日期時間的獲取與計算相關(guān)操作技巧,需要的朋友可以參考下2019-05-05