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

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

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

前言:

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

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

請(qǐng)往下看↓↓

一、新建一個(gè)目錄:utils

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

/**
 * 拖拽移動(dòng)
 * @param  {elementObjct} bar 鼠標(biāo)點(diǎn)擊控制拖拽的元素
 * @param {elementObjct}  target 移動(dòng)的元素
 * @param {function}  callback 移動(dòng)后的回調(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
    };
   
    // 給拖動(dòng)塊添加樣式
    bar.style.cursor = 'move';
   
    // 獲取相關(guān)CSS屬性
    // o是移動(dòng)對(duì)象
    // var getCss = function (o, key) {
    //   return o.currentStyle ? o.currentStyle[key] :             document.defaultView.getComputedStyle(o, false)[key];
    // };
   
    bar.onmousedown = function (event) {
      // 按下時(shí)初始化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
      };
   
      // 給被拖動(dòng)塊初始化樣式
      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;
          // 最終移動(dòng)位置
          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í)行移動(dòng)
          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 綁定對(duì)象
 * desc   只要用到了el-dialog的組件,都可以通過(guò)增加v-draggable屬性變?yōu)榭赏献У膹椏?
 */
const draggable = (el, binding) => {
    // 綁定拖拽事件 [綁定拖拽觸發(fā)元素為彈框頭部、拖拽移動(dòng)元素為整個(gè)彈框]
    startDrag(el.querySelector('.el-dialog__header'), el.querySelector('.el-dialog'), binding.value);
};
 
const directives = {
    draggable,
};
// 這種寫法可以批量注冊(cè)指令
export default {
  install(Vue) {
      Object.keys(directives).forEach((key) => {
      Vue.directive(key, directives[key]);
    });
  },
};

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

全局注冊(cè)

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

五、使用v-draagble

在頁(yè)面上使用v-draagble

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

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

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

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

總結(jié)

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

相關(guān)文章

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

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

    因?yàn)関ue的響應(yīng)式是通過(guò) Object.defineProperty 來(lái)實(shí)現(xiàn)的,但是數(shù)組的length屬性是不能添加getter和setter,所有無(wú)法通過(guò)觀察length來(lái)判斷。這篇文章主要介紹了為什么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è)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue+Element一步步實(shí)現(xiàn)動(dòng)態(tài)添加Input_輸入框案例

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

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

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

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

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

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

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

    這篇文章主要介紹了fetch網(wǎng)絡(luò)請(qǐng)求封裝的示例內(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的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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ù),并自動(dòng)更新視圖,本文將介紹Vue中如何進(jìn)行數(shù)據(jù)響應(yīng)式更新,包括使用Vue的響應(yīng)式系統(tǒng)、使用計(jì)算屬性和使用Vue的watcher,需要的朋友可以參考下
    2023-06-06
  • 解決vue項(xiàng)目中某一頁(yè)面不想引用公共組件app.vue的問(wèn)題

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

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

    VUE中常用的4種高級(jí)方法

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

最新評(píng)論

阿合奇县| 当阳市| 湖南省| 扎兰屯市| 贺州市| 盐山县| 会同县| 山阳县| 肥西县| 宜昌市| 日土县| 额敏县| 霍林郭勒市| 曲麻莱县| 土默特左旗| 佛坪县| 平和县| 英德市| 建湖县| 林甸县| 铜陵市| 固阳县| 藁城市| 桃园县| 陇南市| 曲水县| 宣恩县| 白银市| 杨浦区| 柳江县| 九江市| 大洼县| 怀远县| 嘉定区| 阜康市| 四川省| 新野县| 嵊州市| 乌拉特后旗| 平度市| 高清|