最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果

 更新時(shí)間:2022年02月08日 09:28:10   作者:水冗水孚  
本文主要介紹了拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

問題描述

Sortable.js是一款優(yōu)秀的js拖拽庫(kù),因?yàn)槭窃鷍s寫的,所以性能不錯(cuò),也支持移動(dòng)端哦。本文舉兩個(gè)案例來學(xué)習(xí)一下。

案例一 簡(jiǎn)單拖拽

效果圖

代碼附上

關(guān)于理解看注釋哦,運(yùn)行的話復(fù)制粘貼即可

<!DOCTYPE html>
<html>

<head>
? ? <meta charset="utf-8" />
? ? <title>sortable.js拖動(dòng)例子</title>
? ? <meta name="viewport"
? ? ? ? content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
? ? <!-- 引入插件 -->
? ? <script src="https://www.itxst.com/package/sortable/sortable.min.js"></script>
? ? <style>
? ? ? ? #wrapBox {
? ? ? ? ? ? width: 360px;
? ? ? ? ? ? /* 拖動(dòng)容器的高度,由拖動(dòng)項(xiàng)的高度撐開 */
? ? ? ? ? ? height: auto;
? ? ? ? }

? ? ? ? #wrapBox div {
? ? ? ? ? ? padding: 8px;
? ? ? ? ? ? background-color: #fdfdfd;
? ? ? ? ? ? border: solid 1px #eee;
? ? ? ? ? ? margin-bottom: 10px;
? ? ? ? ? ? /* 添加鼠標(biāo)懸浮樣式為移動(dòng)的樣式,要不然不好看 */
? ? ? ? ? ? cursor: move;
? ? ? ? ? ? font-size: 13px;
? ? ? ? }

? ? ? ? /* 設(shè)置鼠標(biāo)按下時(shí)候的樣式,加了好看些 */
? ? ? ? #wrapBox div:active {
? ? ? ? ? ? background-color: #eee;
? ? ? ? }
? ? </style>
</head>

<body>
? ? <h2>優(yōu)先扣款順序:</h2>
? ? <!-- 一般來說,拖動(dòng)的結(jié)構(gòu)就是:外邊一個(gè)拖動(dòng)容器,里面是一個(gè)又一個(gè)的拖動(dòng)項(xiàng) -->
? ? <div id="wrapBox">
? ? ? ? <div data-id="1工商銀行">工商銀行</div>
? ? ? ? <div data-id="2建設(shè)銀行">建設(shè)銀行</div>
? ? ? ? <div data-id="3中國(guó)銀行">中國(guó)銀行</div>
? ? ? ? <div data-id="4農(nóng)業(yè)銀行">農(nóng)業(yè)銀行</div>
? ? ? ? <div data-id="5交通銀行">交通銀行</div>
? ? </div>
? ? <script>
? ? ? ? //第一步,獲取拖動(dòng)容器
? ? ? ? var wrap = document.getElementById('wrapBox');
? ? ? ? //第二步,設(shè)置拖動(dòng)項(xiàng)的拖動(dòng)規(guī)則
? ? ? ? var rules = {
? ? ? ? ? ? animation: 500, // 拖動(dòng)時(shí)的元素的位置變化的動(dòng)畫時(shí)長(zhǎng),
? ? ? ? ? ? //拖動(dòng)結(jié)束后的回調(diào)函數(shù)
? ? ? ? ? ? onEnd: function (event) {
? ? ? ? ? ? ? ? console.log('參數(shù)是拖動(dòng)事件對(duì)象', event);
? ? ? ? ? ? ? ? //獲取拖動(dòng)后容器中的每一項(xiàng)的位置排序
? ? ? ? ? ? ? ? var arr = sortable.toArray();
? ? ? ? ? ? ? ? console.log('位置排序', arr);
? ? ? ? ? ? },
? ? ? ? };
? ? ? ? //第三步,初始化 --> 給拖動(dòng)容器添加拖動(dòng)規(guī)則?
? ? ? ? var sortable = Sortable.create(wrap, rules);
? ? ? ? /**
? ? ? ? ?* 插件自帶的方法:
? ? ? ? ?* ? ? ?1. sortable.toArray() 獲取序列化后的每個(gè)item元素的id屬性的數(shù)組
? ? ? ? ?* ? ? ?2. Sortable.create(wrap, rules) 給拖動(dòng)容器添加拖動(dòng)規(guī)則
? ? ? ? ?* */
? ? </script>
</body>

</html>

案例二 el-table表格拖拽

這里有一個(gè)細(xì)節(jié),就是表頭數(shù)據(jù)拖動(dòng)的時(shí)候,可能導(dǎo)致渲染數(shù)據(jù)不對(duì)的問題,有的博主是搞兩個(gè)表頭數(shù)組數(shù)據(jù)的,其實(shí)也是一種解決問題的方案。不過個(gè)人愚見略有麻煩,其實(shí)一個(gè)表頭數(shù)組數(shù)據(jù)即可。只要及時(shí)清空,重新賦值即可

效果圖

代碼附上

這里使用的是vue,所以要下載哦 cnpm install sortablejs --save

代碼直接復(fù)制粘貼即可運(yùn)行看效果圖了,關(guān)于使用請(qǐng)看注釋哦

<template>
  <div class="myWrap">
    <el-table
      :data="tableBody"
      border
      row-key="id"
      :header-cell-style="{
        height: '48px',
        background: '#FAFAFA',
        color: '#333333',
        fontWeight: 'bold',
        fontSize: '14px',
      }"
    >
      <!-- 勾選框列 -->
      <el-table-column type="selection" width="48" fixed></el-table-column>
      <!-- 序號(hào)列 -->
      <el-table-column label="序號(hào)" type="index" width="50" fixed>
      </el-table-column>
      <!-- 表頭列 -->
      <el-table-column
        v-for="(item, index) in tableHeader"
        :key="item.index"
        :prop="item.prop"
        :label="item.label"
      >
      </el-table-column>
    </el-table>
    <br />
    <h3>表頭數(shù)據(jù)</h3>
    <pre>{{ tableHeader }}</pre>
    <br />
    <h3>表體數(shù)據(jù)</h3>
    <pre>{{ tableBody }}</pre>
  </div>
</template>
<script>
// 引入sortablejs插件,拖拽主要靠的是這個(gè)插件
import Sortable from "sortablejs";
export default {
  data() {
    return {
      // 表頭數(shù)據(jù)
      tableHeader: [
        {
          label: "姓名",
          prop: "name",
        },
        {
          label: "年齡",
          prop: "age",
        },
        {
          label: "家鄉(xiāng)",
          prop: "home",
        },
        {
          label: "愛好",
          prop: "hobby",
        },
      ],
      // 表體數(shù)據(jù)
      tableBody: [
        {
          id: "1",
          name: "孫悟空",
          age: 500,
          home: "花果山",
          hobby: "吃桃子",
        },
        {
          id: "2",
          name: "豬八戒",
          age: 88,
          home: "高老莊",
          hobby: "吃包子",
        },
        {
          id: "3",
          name: "沙和尚",
          age: 1000,
          home: "通天河",
          hobby: "游泳",
        },
        {
          id: "4",
          name: "唐僧",
          age: 99999,
          home: "東土大唐",
          hobby: "念經(jīng)",
        },
      ],
    };
  },
  mounted() {
    // 列的拖拽初始化
    this.columnDropInit();
    // 行的拖拽初始化
    this.rowDropInit();
  },
  methods: {
    //列拖拽
    columnDropInit() {
      // 第一步,獲取列容器
      const wrapperColumn = document.querySelector(
        ".el-table__header-wrapper tr"
      );
      // 第二步,給列容器指定對(duì)應(yīng)拖拽規(guī)則
      this.sortable = Sortable.create(wrapperColumn, {
        animation: 500,
        delay: 0,
        onEnd: (event) => {
          console.log(
            "拖拽完成以后發(fā)現(xiàn)表頭數(shù)據(jù)并沒有改變,所以需要我們手動(dòng)更新表頭數(shù)據(jù)",
            this.tableHeader
          );
          console.log(
            "根據(jù)舊索引和新索引去更新,其實(shí)就是交換位置",
            event.oldIndex,
            event.newIndex
          );

          // 接下來做索引的交換
          let tempHableHeader = [...this.tableHeader]; // 先存一份臨時(shí)變量表頭數(shù)據(jù)
          let temp; // 臨時(shí)變量用于交換
          temp = tempHableHeader[event.oldIndex - 2]; // 注意這里-2是因?yàn)?,我在表格的前面加了兩列(勾選框列,和序號(hào)列)
          tempHableHeader[event.oldIndex - 2] =
            tempHableHeader[event.newIndex - 2]; // 如果沒有這兩列,序號(hào)就是正常對(duì)應(yīng)的,就不用減2
          tempHableHeader[event.newIndex - 2] = temp;

          // 重要的事情說三遍?。?!
          // 這里一定要先把表頭數(shù)據(jù)清空,然后再下一輪中去賦值,否則會(huì)渲染錯(cuò)誤
          // 這里一定要先把表頭數(shù)據(jù)清空,然后再下一輪中去賦值,否則會(huì)渲染錯(cuò)誤
          // 這里一定要先把表頭數(shù)據(jù)清空,然后再下一輪中去賦值,否則會(huì)渲染錯(cuò)誤
          this.tableHeader = []; // 大家可以注掉試試哦
          this.$nextTick(() => {
            this.tableHeader = tempHableHeader;
          });
        },
      });
    },
    // 行拖拽
    // 個(gè)人認(rèn)為行拖拽不用加,因?yàn)榧恿艘院?,就不能雙擊選行單元格的文字了,當(dāng)然還是要聽產(chǎn)品大佬安排
    rowDropInit() {
      // 第一步,獲取行容器
      const wrapperRow = document.querySelector(
        ".el-table__body-wrapper tbody"
      );
      const that = this; // 存一份指向
      // 第二步,給行容器指定對(duì)應(yīng)拖拽規(guī)則
      Sortable.create(wrapperRow, {
        onEnd({ newIndex, oldIndex }) {
          // 這里是區(qū)分上面的列拖拽的另外一種寫法

          // 首先刪除原來的那一項(xiàng),并且保存一份原來的那一項(xiàng),因?yàn)閟plice返回的是一個(gè)數(shù)組,數(shù)組中的第一項(xiàng)就是刪掉的那一項(xiàng)
          const currRow = that.tableBody.splice(oldIndex, 1)[0];
          // 然后把這一項(xiàng)加入到新位置上
          that.tableBody.splice(newIndex, 0, currRow);
        },
      });
    },
  },
};
</script>
<style lang='less' scoped>
.myWrap {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  padding: 25px;
  /deep/ .el-table {
    .el-table__header-wrapper {
      tr {
        th {
          // 設(shè)置拖動(dòng)樣式,好看一些
          cursor: move;
        }
      }
    }
  }
}
</style>

最后附上官網(wǎng):www.sortablejs.com/ 或: https://www.itxst.com/sortablejs/neuinffi.html

到此這篇關(guān)于拖拽插件sortable.js實(shí)現(xiàn)el-table表格拖拽效果的文章就介紹到這了,更多相關(guān)sortable.js 表格拖拽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue Object.defineProperty及ProxyVue實(shí)現(xiàn)雙向數(shù)據(jù)綁定

    Vue Object.defineProperty及ProxyVue實(shí)現(xiàn)雙向數(shù)據(jù)綁定

    這篇文章主要介紹了Vue Object.defineProperty及ProxyVue實(shí)現(xiàn)雙向數(shù)據(jù)綁定,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • element中el-table局部刷新的實(shí)現(xiàn)示例

    element中el-table局部刷新的實(shí)現(xiàn)示例

    本文主要介紹了element中el-table局部刷新的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • vue實(shí)現(xiàn)列表固定列滾動(dòng)

    vue實(shí)現(xiàn)列表固定列滾動(dòng)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)列表固定列滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue 自定義右鍵樣式的實(shí)例代碼

    vue 自定義右鍵樣式的實(shí)例代碼

    這篇文章主要介紹了vue 自定義右鍵樣式的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 用vue寫一個(gè)日歷

    用vue寫一個(gè)日歷

    這篇文章主要介紹了如何利用vue寫一個(gè)日歷,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下
    2020-11-11
  • vue3實(shí)現(xiàn)數(shù)字滾動(dòng)特效實(shí)例詳解

    vue3實(shí)現(xiàn)數(shù)字滾動(dòng)特效實(shí)例詳解

    這篇文章主要為大家介紹了vue3實(shí)現(xiàn)數(shù)字滾動(dòng)特效實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 搭建vue開發(fā)環(huán)境

    搭建vue開發(fā)環(huán)境

    這篇文章主要介紹了搭建vue開發(fā)環(huán)境的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 詳解如何去除vue項(xiàng)目中的#——History模式

    詳解如何去除vue項(xiàng)目中的#——History模式

    這篇文章主要介紹了詳解如何去除vue項(xiàng)目中的#——History模式 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Vue中實(shí)現(xiàn)動(dòng)畫效果的多種方法小結(jié)

    Vue中實(shí)現(xiàn)動(dòng)畫效果的多種方法小結(jié)

    平時(shí)我們能在網(wǎng)頁(yè)上看到很多動(dòng)畫效果,這些效果看起來就很引人注目,我們是不是也可以在自己的項(xiàng)目中添加一些動(dòng)畫效果,讓我們的頁(yè)面看起來更加的高端大氣上檔次,博人眼球,所以本文給大家介紹了Vue中實(shí)現(xiàn)動(dòng)畫效果的多種方法,需要的朋友可以參考下
    2024-07-07
  • 使用vue框架 Ajax獲取數(shù)據(jù)列表并用BootStrap顯示出來

    使用vue框架 Ajax獲取數(shù)據(jù)列表并用BootStrap顯示出來

    這篇文章主要介紹了使用vue框架 Ajax獲取數(shù)據(jù)列表并用BootStrap顯示出來,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

满洲里市| 武乡县| 巴彦淖尔市| 南京市| 锦州市| 南召县| 蛟河市| 仁寿县| 黔江区| 姚安县| 花莲县| 富锦市| 油尖旺区| 泸定县| 措勤县| 铁岭县| 伊春市| 商丘市| 宿迁市| 肃南| 应用必备| 东光县| 永德县| 望奎县| 麻江县| 宁海县| 阿坝县| 沿河| 泰州市| 永胜县| 东莞市| 辽源市| 井冈山市| 阜康市| 新沂市| 抚州市| 清远市| 元朗区| 襄城县| 庄河市| 京山县|