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

vue/Element?UI實(shí)現(xiàn)Element?UI?el-dialog自由拖動功能實(shí)現(xiàn)

 更新時間:2023年06月16日 10:17:19   作者:迷知返  
最近工作上需要在el-dialog基礎(chǔ)上進(jìn)行些功能的改動,下面這篇文章主要給大家介紹了關(guān)于vue/Element?UI實(shí)現(xiàn)Element?UI?el-dialog自由拖動功能實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

前言:

最近有個項(xiàng)目,客戶要求彈窗可拖動,但是由于elemen ui本身的彈窗并沒有拖動的屬性,無法滿足客戶的需求。

于是我百度找到了幾篇文章,終于可以實(shí)現(xiàn)客戶的需求!

請往下看↓↓

一、新建一個目錄:utils

二、創(chuàng)建drag .js文件

/**
 * 拖拽移動
 * @param  {elementObjct} bar 鼠標(biāo)點(diǎn)擊控制拖拽的元素
 * @param {elementObjct}  target 移動的元素
 * @param {function}  callback 移動后的回調(diào)
 */
export function startDrag(bar, target, callback) {
    var params = {
      top: 0,
      left: 0,
      currentX: 0,
      currentY: 0,
      flag: false,
      cWidth: 0,
      cHeight: 0,
      tWidth: 0,
      tHeight: 0
    };
   
    // 給拖動塊添加樣式
    bar.style.cursor = 'move';
   
    // 獲取相關(guān)CSS屬性
    // o是移動對象
    // var getCss = function (o, key) {
    //   return o.currentStyle ? o.currentStyle[key] :             document.defaultView.getComputedStyle(o, false)[key];
    // };
   
    bar.onmousedown = function (event) {
      // 按下時初始化params
      var e = event ? event : window.event;
      params = {
        top: target.offsetTop,
        left: target.offsetLeft,
        currentX: e.clientX,
        currentY: e.clientY,
        flag: true,
        cWidth: document.body.clientWidth,
        cHeight: document.body.clientHeight,
        tWidth: target.offsetWidth,
        tHeight: target.offsetHeight
      };
   
      // 給被拖動塊初始化樣式
      target.style.margin = 0;
      target.style.top = params.top + 'px';
      target.style.left = params.left + 'px';
   
      if (!event) {
        // 防止IE文字選中
        bar.onselectstart = function () {
          return false;
        }
      }
   
      document.onmousemove = function (event) {
        // 防止文字選中
        window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
   
        var e = event ? event : window.event;
        if (params.flag) {
          var nowX = e.clientX;
          var nowY = e.clientY;
          // 差異距離
          var disX = nowX - params.currentX;
          var disY = nowY - params.currentY;
          // 最終移動位置
          var zLeft = 0;
          var zTop = 0;
   
          zLeft = parseInt(params.left) + disX;
          // 限制X軸范圍
          if (zLeft <= -parseInt(params.tWidth / 2)) {
            zLeft = -parseInt(params.tWidth / 2);
          }
          if (zLeft >= params.cWidth - parseInt(params.tWidth * 0.5)) {
            zLeft = params.cWidth - parseInt(params.tWidth * 0.5);
          }
   
          zTop = parseInt(params.top) + disY;
          // 限制Y軸范圍
          if (zTop <= 0) {
            zTop = 0;
          }
          if (zTop >= params.cHeight - parseInt(params.tHeight * 0.5)) {
            zTop = params.cHeight - parseInt(params.tHeight * 0.5);
          }
   
          // 執(zhí)行移動
          target.style.left = zLeft + 'px';
          target.style.top = zTop + 'px';
        }
   
        if (typeof callback == "function") {
          callback(zLeft, zTop);
        }
      }
   
      document.onmouseup = function () {
        params.flag = false;
        document.onmousemove = null;
        document.onmouseup = null;
      };
    };
  }

三、創(chuàng)建directive.js 文件

// 引入拖拽js
import { startDrag } from './drag.js'
 
/**
 * 為el-dialog彈框增加拖拽功能
 * @param {*} el 指定dom
 * @param {*} binding 綁定對象
 * desc   只要用到了el-dialog的組件,都可以通過增加v-draggable屬性變?yōu)榭赏献У膹椏?
 */
const draggable = (el, binding) => {
    // 綁定拖拽事件 [綁定拖拽觸發(fā)元素為彈框頭部、拖拽移動元素為整個彈框]
    startDrag(el.querySelector('.el-dialog__header'), el.querySelector('.el-dialog'), binding.value);
};
 
const directives = {
    draggable,
};
// 這種寫法可以批量注冊指令
export default {
  install(Vue) {
      Object.keys(directives).forEach((key) => {
      Vue.directive(key, directives[key]);
    });
  },
};

四、main.js文件中全局引入vue指令

全局注冊

import directive from './utils/directive'
Vue.use(directive)

五、使用v-draagble

在頁面上使用v-draagble

 好了,經(jīng)過以上的幾步,已經(jīng)可以實(shí)現(xiàn)拖動功能了!

如果有不同看法,歡迎留言交流,謝謝?。?/p>

下面是一個博主的文章,大家不懂也可以參考一下

參考鏈接:http://m.fzitv.net/article/234469.htm

總結(jié)

到此這篇關(guān)于vue/Element UI實(shí)現(xiàn)Element UI el-dialog自由拖動功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Element UI el-dialog自由拖動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue不能觀察到數(shù)組length的變化

    Vue不能觀察到數(shù)組length的變化

    因?yàn)関ue的響應(yīng)式是通過 Object.defineProperty 來實(shí)現(xiàn)的,但是數(shù)組的length屬性是不能添加getter和setter,所有無法通過觀察length來判斷。這篇文章主要介紹了為什么Vue不能觀察到數(shù)組length的變化,需要的朋友可以參考下
    2018-06-06
  • vue2.0 下拉框默認(rèn)標(biāo)題設(shè)置方法

    vue2.0 下拉框默認(rèn)標(biāo)題設(shè)置方法

    今天小編就為大家分享一篇vue2.0 下拉框默認(rèn)標(biāo)題設(shè)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue+Element一步步實(shí)現(xiàn)動態(tài)添加Input_輸入框案例

    Vue+Element一步步實(shí)現(xiàn)動態(tài)添加Input_輸入框案例

    這篇文章主要介紹了Vue+Element一步步實(shí)現(xiàn)動態(tài)添加Input_輸入框案例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 一文帶你了解Vue中單文件組件的使用

    一文帶你了解Vue中單文件組件的使用

    在web開發(fā)中,組件化開發(fā)已成為一種趨勢,Vue提供了一種高效的方式來創(chuàng)建和管理這些組件—單文件組件,下面我們就來看看它的具體應(yīng)用吧
    2024-03-03
  • Spring boot 和Vue開發(fā)中CORS跨域問題解決

    Spring boot 和Vue開發(fā)中CORS跨域問題解決

    這篇文章主要介紹了Spring boot 和Vue開發(fā)中CORS跨域問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • fetch網(wǎng)絡(luò)請求封裝示例詳解

    fetch網(wǎng)絡(luò)請求封裝示例詳解

    這篇文章主要介紹了fetch網(wǎng)絡(luò)請求封裝的示例內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    這篇文章主要介紹了Vue數(shù)據(jù)監(jiān)聽方法watch的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue中如何進(jìn)行數(shù)據(jù)響應(yīng)式更新

    Vue中如何進(jìn)行數(shù)據(jù)響應(yīng)式更新

    Vue是一款流行的JavaScript框架,它提供了數(shù)據(jù)響應(yīng)式更新的能力,可以讓我們輕松地更新數(shù)據(jù),并自動更新視圖,本文將介紹Vue中如何進(jìn)行數(shù)據(jù)響應(yīng)式更新,包括使用Vue的響應(yīng)式系統(tǒng)、使用計算屬性和使用Vue的watcher,需要的朋友可以參考下
    2023-06-06
  • 解決vue項(xiàng)目中某一頁面不想引用公共組件app.vue的問題

    解決vue項(xiàng)目中某一頁面不想引用公共組件app.vue的問題

    這篇文章主要介紹了解決vue項(xiàng)目中某一頁面不想引用公共組件app.vue的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • VUE中常用的4種高級方法

    VUE中常用的4種高級方法

    provide/inject 是 Vue.js 中用于跨組件傳遞數(shù)據(jù)的一種高級技術(shù),它可以將數(shù)據(jù)注入到一個組件中,然后讓它的所有子孫組件都可以訪問到這個數(shù)據(jù),這篇文章主要介紹了VUE中常用的4種高級方法,需要的朋友可以參考下
    2023-05-05

最新評論

海晏县| 大英县| 临湘市| 安化县| 江口县| 灌云县| 中方县| 洱源县| 奇台县| 祁门县| 宾阳县| 建平县| 顺义区| 滕州市| 泸溪县| 广汉市| 云阳县| 德阳市| 雅安市| 从江县| 金堂县| 宜阳县| 镇江市| 永川市| 怀集县| 阆中市| 平潭县| 方城县| 安多县| 和平区| 茶陵县| 寿阳县| 玉林市| 常熟市| 且末县| 吉木乃县| 申扎县| 京山县| 井冈山市| 牙克石市| 益阳市|