国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序通過 movable-area 做一個(gè)與vuedraggable相似的上下拖動(dòng)排序控件

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序通過 movable-area 做一個(gè)與vuedraggable相似的上下拖動(dòng)排序控件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

因?yàn)橹皇亲鰝€(gè)小案例 我就直接代碼寫page頁面里了 其實(shí)很簡單 組件稍微改一下就好了
wxss

/* 設(shè)置movable-area的寬度 */
.area{
  width: 100%;
}

/* a b c 每條元素的樣式 */
movable-view {
  width: calc(100% - 2px);
  background-color: red;
  height: 60rpx;
  line-height: 60rpx;
  color: #FFFFFF;
  text-align: center;
  border: royalblue 1px solid;
}

就是很普通的樣式編寫

js代碼

Page({
  data: {
    //排序的集合數(shù)據(jù)源
    list: [
      { text: 'a', id: 0 },
      { text: 'b', id: 1 },
      { text: 'c', id: 2 }
    ],
    nodeHeight: 0,  //記錄單個(gè)節(jié)點(diǎn)的高度 px像素單位
    //設(shè)置movable-area總高度
    totalHeight: 0
  },
  //第一個(gè)要執(zhí)行的生命周期
  onLoad: function () {
    //調(diào)用初始化函數(shù)
    this.initialization();
  },
  //將指定元素 在數(shù)組中后移一個(gè)下標(biāo)
  moveElementBackward(arr, index) {
    if((index + 1) === arr.length) {
        return arr
    }
    const element = arr[index];
    arr.splice(index, 1);
    arr.splice(index + 1, 0, element);
    return arr;
  },
  //將指定元素 在數(shù)組中前移一個(gè)下標(biāo)
  moveIndexForward(arr, index) {
    if(index == 0){
      return arr
    }
    var newArr = Array.from(arr);
    var value1 = newArr[index];
    var value2 = newArr[index - 1];
    newArr[index] = value2;
    newArr[index - 1] = value1;
    return newArr;
  },
  //初始化加載數(shù)據(jù)
  initialization() {
    //先確認(rèn) list是有數(shù)據(jù)的 如果沒有直接 return結(jié)束邏輯
    let list = this.data.list
    if(!list.length) {
      return
    }
    const query = wx.createSelectorQuery()
    //獲取 node 第一個(gè)節(jié)點(diǎn)的高度 不然不知道每個(gè)節(jié)點(diǎn)到底多高
    query.select('.node').boundingClientRect()
    query.exec((doms) => {
      /*
          循環(huán)遍歷list top是與頂部的距離
          就是  當(dāng)前下標(biāo)乘以 當(dāng)個(gè)高度
          例如 一個(gè) 40  那么 第二個(gè)的位置搞好是 40  而第三個(gè)則要在 80 第一個(gè)在 0
      */
      list = list.map((item,index) => {
        item.top = (index*doms[0].height)
        return item
      })
      //給總高度 單個(gè)節(jié)點(diǎn)高度  和  movable-area的高度賦值
      this.setData({
        nodeHeight: doms[0].height,
        totalHeight: (doms[0].height * list.length),
        list: list
      })
    })
  },
  //當(dāng)用戶拖拽完松開手時(shí)觸發(fā)
  handleTouchEnd() {
    //調(diào)用initialization 初始化數(shù)據(jù)
    this.initialization()
  },
  //當(dāng)用戶拖動(dòng)某塊元素時(shí)觸發(fā)
  handleTouchMove: function (event) {
    //獲取到當(dāng)前用拖動(dòng)的是第幾個(gè)元素
    const index = event.currentTarget.dataset.index
    //定義一個(gè)list 接受tata中的list
    const list = this.data.list
    // 計(jì)算出 當(dāng)前下標(biāo)應(yīng)該在的位置  加上  多 三分之二個(gè)節(jié)點(diǎn)的高度
    const top = ((index * this.data.nodeHeight) + (this.data.nodeHeight * (2/3)))
    // 計(jì)算出當(dāng)前元素應(yīng)該在的位置  并減去 三分之二個(gè)節(jié)點(diǎn)的高度
    const bottom = ((index * this.data.nodeHeight) - (this.data.nodeHeight * (2/3)))

    //獲取movable-area和movable-view節(jié)點(diǎn)
    const query = wx.createSelectorQuery().in(this)
    query.select('.area').boundingClientRect()
    query.selectAll('.node').boundingClientRect()
    query.exec(res => {
      //存儲(chǔ)movable-area 元素信息
      const nodeRect = res[0]
      //獲取用戶當(dāng)前拖動(dòng)的元素信息
      const nodeTop = res[1][index]
      //用 node 與屏幕頂部的距離減去 area與屏幕頂部的距離 間距得到  node與area的距離
      const distance = (nodeTop.top - nodeRect.top)
      //用移動(dòng)距離判斷 是否下移了 2/3個(gè)節(jié)點(diǎn)還要多的距離
      if(distance > top) {
        // 調(diào)用 向后移動(dòng)一個(gè)下標(biāo)的函數(shù)
        const newArray = this.moveElementBackward(list, index);
        //調(diào)用setData 修改函數(shù) 修改 data中的 list 換成我們新處理好的函數(shù)
        this.setData({
          list: newArray
        })
        //等待  響應(yīng)式數(shù)據(jù)修改并生效后再執(zhí)行的nextTick
        wx.nextTick(() => {
          //調(diào)用初始化函數(shù)
          this.initialization();
        })
      }
      //用移動(dòng)距離判斷 是否上移了 2/3個(gè)節(jié)點(diǎn)還要多的距離
      if(distance < bottom) {
        //調(diào)用函數(shù)  將 當(dāng)前下標(biāo)上一一下  向上調(diào)1
        const newArray = this.moveIndexForward(list, index);
        this.setData({
          list: newArray
        })
        //等待  響應(yīng)式數(shù)據(jù)修改并生效后再執(zhí)行的nextTick
        wx.nextTick(() => {
          //調(diào)用初始化函數(shù)
          this.initialization();
        })
      }
    })
  }
});

我的注釋還是寫的非常認(rèn)真的 大家可以好好讀一讀
然后 wxml 沒什么特別的 就是渲染一下list

<movable-area
  class = "area"
  style = "height: {{totalHeight}}px;"
>
  <movable-view
    wx:for="{{list}}"
    wx:key="id"
    data-index="{{index}}"
    y="{{item.top}}"
    direction="all"
    class="node"
    bindtouchmove="handleTouchMove"
    bindtouchend="handleTouchEnd"
  >
    {{item.text}}
  </movable-view>
</movable-area>

微信小程序通過 movable-area 做一個(gè)與vuedraggable相似的上下拖動(dòng)排序控件,微信小程序,小程序
這樣 我們就做了一個(gè) 可以上下拖動(dòng)元素排序的小案例了
微信小程序通過 movable-area 做一個(gè)與vuedraggable相似的上下拖動(dòng)排序控件,微信小程序,小程序
效果也是非常不錯(cuò)的文章來源地址http://www.zghlxwxcb.cn/news/detail-725391.html

到了這里,關(guān)于微信小程序通過 movable-area 做一個(gè)與vuedraggable相似的上下拖動(dòng)排序控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于movable-view的微信小程序拖拽排序(含源碼)

    基于movable-view的微信小程序拖拽排序(含源碼)

    目錄 一、前言與效果展示 二、源碼 1.目錄結(jié)構(gòu) 2.drag.wxml文件 3.drag.wxss文件 (1)drag.less (2)drag.wxss? 不會(huì)使用less的就用這個(gè) 4.drag.js文件 5.drag.json文件 三、結(jié)語 ? ? ? ? 最近在做一個(gè)賬本,里面有個(gè)功能需要“拖拽排序”,網(wǎng)上的代碼我也看不太懂,打算自己寫一個(gè)。微信

    2024年02月03日
    瀏覽(27)
  • 微信小程序 movable-view 控制長按才觸發(fā)拖動(dòng) 輕輕滑動(dòng)頁面正常滾動(dòng)效果

    微信小程序 movable-view 控制長按才觸發(fā)拖動(dòng) 輕輕滑動(dòng)頁面正常滾動(dòng)效果

    今天寫 movable-area+movable-view遇到了個(gè)頭疼的問題 那就是 movable-view 監(jiān)聽了用戶拖拽自己 但 我們小程序 上下滾動(dòng)頁面靠的也是拖拽 也就是說 如果放在這里 用戶拖動(dòng) movable-view部分 就會(huì)永遠(yuǎn)觸發(fā)不了滾動(dòng) 那么 我們先可以 加一個(gè) bindlongpress=\\\"longpressHandler\\\"事件 用戶長按時(shí)觸發(fā) 然

    2024年02月06日
    瀏覽(31)
  • 微信小程序通過wx.navigateBack實(shí)現(xiàn)返回上一個(gè)頁面并調(diào)用方法

    需求 從A頁面跳到B頁面,B頁面執(zhí)行完所有步驟后返回A頁面并調(diào)用A頁面的方法 實(shí)現(xiàn)方法 主要用到 wx.navigateBack 和 wx.navigateTo 兩個(gè)路由跳轉(zhuǎn)方法,從A跳向B需要使用 wx.navigateTo ( 千萬不能使用wx.redirectTo,這個(gè)跳轉(zhuǎn)后頁面就會(huì)銷毀,無法通過wx.navigateBack返回 ) 參考文檔 小程序官方對(duì)路

    2024年02月15日
    瀏覽(26)
  • 【微信小程序】通過調(diào)用 wx.navigateBack() 方法來退出當(dāng)前界面并返回上一個(gè)界面

    在點(diǎn)擊某個(gè)按鈕或執(zhí)行某個(gè)條件時(shí)觸發(fā),示例代碼: 在這個(gè)示例中, delta 參數(shù)指定了要返回的界面數(shù)。如果你只想返回上一個(gè)界面,可以將 delta 設(shè)置為 1。如果你想返回更多的界面,可以增加 delta 的值。 在小程序中,tabBar 頁面的返回操作與非 tabBar 頁面有所不同。通常,

    2024年02月13日
    瀏覽(26)
  • 微信小程序 通過setData 給兩個(gè)變量設(shè)置同一個(gè)數(shù)組時(shí),為什么修改一個(gè)變量,另一個(gè)會(huì)也被修改?

    在微信小程序中,使用 setData 方法更新數(shù)據(jù)時(shí),如果給兩個(gè)變量設(shè)置同一個(gè)數(shù)組,修改其中一個(gè)變量的值會(huì)導(dǎo)致另一個(gè)變量也被修改的原因是,數(shù)組是引用類型的數(shù)據(jù),在內(nèi)存中的存儲(chǔ)方式是按引用地址存儲(chǔ)。 當(dāng)你將一個(gè)數(shù)組賦值給兩個(gè)變量時(shí),實(shí)際上兩個(gè)變量共享同一塊內(nèi)

    2024年02月11日
    瀏覽(32)
  • 微信小程序縮放圖片與滑動(dòng)圖片:movable-view與swiper一起使用所產(chǎn)生的手勢沖突的基本解決方案(操作過于頻繁還是會(huì)出現(xiàn)問題,基本的使用是沒有問題的)

    1.一些參數(shù)和需要用到的方法js代碼注釋都有了,只要復(fù)制過去看就好了 2.怎么解決這個(gè)手勢沖突呢,我采用的是mina-touch插件,去監(jiān)聽這兩種手勢,當(dāng)雙指在的時(shí)候,長按事件就不觸發(fā),滑動(dòng)的時(shí)候長按事件也要阻止,因?yàn)樵诓煌5幕瑒?dòng)的時(shí)候,也會(huì)長按,大概就是這么一個(gè)

    2024年02月15日
    瀏覽(36)
  • 通過微信小程序?qū)崿F(xiàn)登錄功能

    [ ](https://dev.csdn.net/activity?utm_source=sale_sourcesale_source=q4AnCOkys7) 在微信公眾平臺(tái)中注冊(cè)小程序,并獲取 AppID。 在小程序中創(chuàng)建登錄頁面,包括用戶名、密碼輸入框和登錄按鈕。 將用戶名和密碼通過 HTTPS POST 請(qǐng)求發(fā)送到后端服務(wù)器。 后端服務(wù)器驗(yàn)證用戶名和密碼是否正確,如果

    2023年04月13日
    瀏覽(158)
  • 微信小程序通過字典表匹配對(duì)應(yīng)數(shù)據(jù)

    微信小程序通過字典表匹配對(duì)應(yīng)數(shù)據(jù)

    一般來說,前端根據(jù)后臺(tái)返回 code 碼展示對(duì)應(yīng)內(nèi)容只需要在前臺(tái)判斷 code 值展示對(duì)應(yīng)的內(nèi)容即可,但要是匹配的 code 碼比較多或者多個(gè)頁面用到時(shí),為了便于后期維護(hù),后臺(tái)就會(huì)使用字典表讓前端匹配,下面我將在微信小程序中通過 wxs 的方法實(shí)現(xiàn)這個(gè)操作。 可以看到,上述

    2024年02月03日
    瀏覽(23)
  • 微信小程序通過Webview打開外部網(wǎng)站

    微信小程序通過Webview打開外部網(wǎng)站

    微信小程序是支持訪問第三方網(wǎng)站,但前提是第三方網(wǎng)站得允許訪問,因此要在第三方網(wǎng)站的根目錄下添加“業(yè)務(wù)域名” 登陸小程序后臺(tái),找到開發(fā)設(shè)置,添加要訪問的第三方網(wǎng)站 先配置校驗(yàn)文件到第三方網(wǎng)站根目錄下 ?再添加驗(yàn)證。 這個(gè)時(shí)候,就可以在小程序內(nèi)通過web

    2024年02月11日
    瀏覽(16)
  • 微信小程序怎么制作?制作一個(gè)微信小程序需要多少錢?

    微信小程序怎么制作?制作一個(gè)微信小程序需要多少錢?

    隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,微信小程序已成為連接用戶與服務(wù)的重要橋梁。它以其便捷性和易用性,為各類企業(yè)和個(gè)人提供了一個(gè)全新的展示和交易平臺(tái)。那么,如何制作一個(gè)微信小程序?又需要投入多少資金呢?本文將為您提供全面的解答。 制作微信小程序的步驟 1 、準(zhǔn)

    2024年04月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包