微信小程序拖拽排序有效果圖

效果圖

請添加圖片描述
請添加圖片描述

.wxml

<view class="container" style="--w:{{w}}px;" wx:if="{{location.length}}"><view class="container-item" wx:for="{{list}}" wx:key="index" data-index="{{index}}"style="--c:{{item.color}};transform:translate3d({{location[item.i].x}}px, {{location[item.i].y}}px, 0);{{select === index?'z-index:1;left:'+moveX+'px;top:'+moveY+'px;':animation?'transition: transform 0.3s;':''}}" bind:touchstart="touchS" bind:touchmove="touchM" bind:touchend="touchE">{{item.num}}</view>
</view>

.wxss

.container{position: relative;width: 100%;
}
.container-item{width: var(--w);height: var(--w);background: var(--c);position: absolute;left: 0;top: 0;display: flex;align-items: center;justify-content: center;font-size: 48rpx;color: #fff;
}

.js

Page({data: {list:[{color:'#000',num:1},{color:'#f37b1d',num:2},{color:'#39b54a',num:3},{color:'#0081ff',num:4},{color:'#e54d42',num:5},{color:'#e03997',num:6},{color:'#FF66CC',num:7},{color:'#003399',num:8},{color:'#99FFFF',num:9},],/** 拖拽列表寬度 */width:wx.getWindowInfo().windowWidth,/** 每行顯示個數 */columns:4,/** 選中元素 */select:-1,/** 位置 */location:[],/** 動畫 */animation:true,},onLoad(){let w = this.data.w,list = this.data.list,location = [],columns = this.data.columns,numY,numX;w = this.data.width / columnsfor(let i = 0;i < list.length;i++){numY = i / columns | 0numX = i - numY * columnslist[i].row = numXlist[i].i = ilocation.push({x:numX * w,y:numY * w })}this.setData({w,list,location,})},/** 選中 */touchS(e){this.data.startX = e.touches[0].clientXthis.data.startY = e.touches[0].clientYconst index = e.currentTarget.dataset.indexthis.setData({select:index,})this.data.list[index].n = index},/** 拖動 */touchM(e){let list = this.data.list,select = this.data.select,startX = this.data.startX,startY = this.data.startY;const dragX = e.touches[0].clientX,dragY = e.touches[0].clientY;const x = dragX - startX,y = dragY - startY,columns = this.data.columns,w = this.data.w,f = w / 2;this.setData({moveX:x,moveY:y,})const o = list[select]const selectX = ((x > 0 ? x + f : x - f) / w | 0) + o.rowif(selectX >= columns || selectX < 0){return}const stx = (select / columns | 0) * columnsconst lon = selectX + stx const site = ((y > 0 ? y + f : y - f) / w | 0) * columns + lonif(!list[site] || o.n === site){return}let numif(site !== select || list[o.n].i !== select){for(let i = 0;i < list.length;i++){if(i !== select && list[i].i === site){num = ibreak;}}}else{num = o.n}list[num].i = o.nlist[select].n = sitethis.setData({list,})},/** 結束 */touchE(){var that = thisconst list = that.data.list,select = that.data.select,columns = this.data.columnslet numY,numX;list[select].i = list[select].nlist.sort((a,b) => a.i - b.i)for(let i = 0;i < list.length;i++){numY = i / columns | 0numX = i - numY * columnslist[i].row = numX}that.setData({animation:false},() => {that.setData({select:-1,moveX:0,moveY:0,list,},() => {setTimeout(() => {that.setData({animation:true})},300)})})},
})

遇到問題可以看我主頁加我Q,很少看博客,對你有幫助別忘記點贊收藏。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77923.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop三大組件的結構及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系統&#xff0c;用于存儲和管理海量數據。它具有高容錯性、高吞吐量和可擴展性&#xff0c;能夠在多個節點上存儲和管理大規模數據 1.2架構&#xff1a;采用主從架構&#xff0c;由一個 NameNode 和多個 DataNode 組成。NameNode…

解決jupyter notebook修改路徑下沒有c.NotebookApp.notebook_dir【建議收藏】

文章目錄 一、檢查并解決問題二、重新設置默認路徑創作不易&#xff0c;感謝未來首富們的支持與關注&#xff01; 最近在用jupyter notebook編寫代碼時&#xff0c;更新了一下Scikit-learn的版本&#xff0c;然后重新打開jupyter notebook的時候&#xff0c;我傻眼了&#xff0…

MCP Host、MCP Client、MCP Server全流程實戰

目錄 準備工作 MCP Server 實現 調試工作 MCP Client 實現 MCP Host 配置 第一步:配置支持 function calling的 LLM 第二步:添加MCP Server 一般有兩種方式,第一種json配置,第二種直接是Command形式,我這里采用Command形式 第三步:使用MCP Server 準備工作 安裝…

4.21—4.22學習總結 JavaWeb:HTML-CSS

Web&#xff1a;能夠通過瀏覽器訪問到的網站。 Web標準&#xff1a; HTML&#xff1a; vscode中進行注釋的快捷鍵為ctrl斜線/ h1的字體最大&#xff0c;依次遞減&#xff0c;只存在h1—h6。 超鏈接&#xff1a; 設置字體顏色&#xff1a; 方式三寫一個css文件&#xff0c;將方…

Kaamel Agent: 基于EU AI Act的AI影響評估(AIIA)

1. 引言&#xff1a;安全視角下的AI監管 隨著人工智能技術的快速發展和廣泛應用&#xff0c;AI系統在為社會帶來創新和效率的同時&#xff0c;也引發了諸多關于安全、隱私和合規的擔憂。在這一背景下&#xff0c;全球范圍內涌現出多種監管框架和標準&#xff0c;旨在確保AI系統…

Mongodb分布式文件存儲數據庫

文章目錄 一、MongoDB 簡介基本信息特點內部組件 二、MongoDB 部署1. 安裝依賴2. 解壓部署并配置環境變量3. 修改配置文件以及啟動服務4.數據庫權限管理 三、MongoDB 管理1. 角色權限2. 操作命令用戶管理命令常用命令&#xff08;Mongo4.2.8&#xff09;數據庫相關用戶相關集合…

麒麟V10安裝MySQL8.4

1、下載安裝包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解壓 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安裝MySQL 3.1、卸載mariadb rpm -qa | grep mariadb rpm -e m…

Unreal如何使用后處理材質實現一個黑屏漸變效果

文章目錄 前言相機后期處理材質創建材質相機設置動態修改FadeAlpha參數使用示例最后前言 UE5 開發VR ,如何通過PostProcess輕松實現黑屏漸變效果 最簡單的辦法,其實是使用一個半球形模型,遮擋住相機,然后控制這個半球形遮罩的顏色透明度,至少Unity中默認的Tunneling是這么…

其它生成式(對比列表生成式)

一、字典生成式&#xff1a; # keys[name, age, gender] # dic{key:None for key in keys} # print(dic) items[(name, Tom), (age, 18), (gender, male)] res{k:v for k,v in items if k ! gender} print(res) 二、集合生成式&#xff1a; keys[name, age, gender] set1{ke…

健身房管理系統(springboot+ssm+vue+mysql)含運行文檔

健身房管理系統(springbootssmvuemysql)含運行文檔 健身房管理系統是一個全面的解決方案&#xff0c;旨在幫助健身房高效管理其運營。系統提供多種功能模塊&#xff0c;包括會員管理、員工管理、會員卡管理、教練信息管理、解聘管理、健身項目管理、指導項目管理、健身器材管理…

LeetCode 第 262 題全解析:從 SQL 到 Swift 的數據分析實戰

文章目錄 摘要描述題解答案&#xff08;SQL&#xff09;Swift 題解代碼分析代碼示例&#xff08;可運行 Demo&#xff09;示例測試及結果時間復雜度分析空間復雜度分析總結未來展望 摘要 在實際業務中&#xff0c;打車平臺要監控行程的取消率&#xff0c;及時識別服務質量的問…

三生原理與現有密碼學的核心區別?

AI輔助創作&#xff1a; 三生原理與現有密碼學的核心區別 一、?哲學基礎與設計邏輯? ?動態生成 vs 靜態分析? 三生原理以“陰陽動態平衡”為核心&#xff0c;通過參數化生成&#xff08;如素數構造中的陰陽元聯動公式&#xff09;模擬系統演化過程&#xff0c;而現有密碼…

4.19-4.20學習總結 網絡編程+反射+動態代理

網絡編程&#xff1a; IPv6有2的128次方個ip。 端口號&#xff1a; 協議&#xff1a; UDP發送和接收消息&#xff1a; UDP的三種通信方式&#xff1a; 單播&#xff1a;一對一&#xff0c;一個發送端對應一個接收端 創建DatagramSocket對象 組播&#xff1a;一個發送端對應一…

Swiper、樣式結構重用、GridGridItem

今日核心&#xff1a; 容器組件&#xff1a;Swiper、Grid\GridItem樣式&結構重用&#xff1a;Builder、Extend、Styles 相關資源: 圖片素材&#xff1a;&#x1f4ce;day01.zip 1. Swiper 1.1. 適用場景 首先來看看 Swiper 在什么情況下會用到 鏈接 Swiper組件提供滑…

前沿分享|技術雷達202504月刊精華

本期雷達 ###技術部分 7. GraphRAG 試驗 在上次關于 檢索增強生成&#xff08;RAG&#xff09;的更新中&#xff0c;我們已經介紹了GraphRAG。它最初在微軟的文章中被描述為一個兩步的流程&#xff1a; &#xff08;1&#xff09;對文檔進行分塊&#xff0c;并使用基于大語言…

數據結構與算法-順序表應用

一.通訊錄的創建 首先我們要理解的是通訊錄本身就是以順序表為底層的 只不過順序表中的數組&#xff0c;這里我們是用結構體來替代&#xff0c;用來存儲用戶的信息 由于是通訊錄的本質就是順序表&#xff0c;所以順序表的任何方法它都能套用 Contact.h: #pragma once #def…

【C++】新手入門指南(下)

文章目錄 前言 一、引用 1.引用的概念和定義 2.引用的特性 3.引用的使用 4.const引用 5.指針和引用的關系 二、內聯函數 三、nullptr 總結 前言 這篇續上篇的內容新手入門指南&#xff08;上&#xff09;&#xff0c;繼續帶大家學習新知識。如果你感興趣歡迎訂購本專欄。 一、…

uniapp-商城-33-shop 布局搜索頁面以及u-search

shop頁面上有一個搜索&#xff0c;可以進行商品搜索&#xff0c;這里我們先做一個頁面布局&#xff0c;后面再來進行數據i聯動。 1、shop頁面的搜索 2、搜索的頁面代碼 <navigator class"searchView" url"/pagesub/pageshop/search/search"> …

SAP 采購訂單如何防止開票數量 大于 收貨數量呢

配置點如下&#xff1a; 事務碼&#xff1a;OMRM&#xff0c;配置如下 當過賬開票的數量 大于收貨數量的時候會提示如下&#xff1a;

Kotlin 的 suspend 關鍵字

更多相關知識 Kotlin 的 suspend 關鍵字是 Kotlin 協程的核心組成部分&#xff0c;它用于標記一個函數可以被掛起&#xff08;暫停執行&#xff09;并在稍后恢復執行&#xff0c;而不會阻塞線程。 理解 suspend 的作用需要從以下幾個方面入手&#xff1a; 1. 允許非阻塞的異步…