微信小程序?qū)崿F(xiàn)長按拖拽排序功能
更新時間:2022年05月23日 17:17:36 作者:haicome
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)長按拖拽排序功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
工作中遇到一個上傳圖片長按后拖動排序的一個功能,于是寫下了一個小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 () {
??
? },
? /**
? ?* 用戶點(diǎn)擊右上角分享
? ?*/
? 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)文章
5個你不知道的JavaScript字符串處理庫(小結(jié))
這篇文章主要介紹了5個你不知道的JavaScript字符串處理庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
JavaScript深入淺出__proto__和prototype
這篇文章主要介紹了JavaScript深入淺出__proto__和prototype,文章基于JavaScript的相關(guān)資料展開詳細(xì)的內(nèi)容介紹。具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
javascript實(shí)現(xiàn)日期時間動態(tài)顯示示例代碼
這篇文章主要介紹了javascript實(shí)現(xiàn)日期時間動態(tài)顯示示例代碼,頁面動態(tài)顯示時間變化的方法有很多,本文為大家介紹下使用javascript的具體實(shí)現(xiàn),感興趣的朋友可以參考一下2015-09-09
Google 靜態(tài)地圖API實(shí)現(xiàn)代碼
Google 靜態(tài)地圖 文檔說的很詳細(xì),這里就不在啰嗦了!2010-11-11

