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

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

這篇具有很好參考價(jià)值的文章主要介紹了vue/Element UI 實(shí)現(xiàn)Element UI el-dialog 自由拖動(dòng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:

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

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

請(qǐng)往下看↓↓

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

elementui 實(shí)現(xiàn)拖拽,vue,vue.js,前端,elementui

二、創(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的組件,都可以通過增加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

elementui 實(shí)現(xiàn)拖拽,vue,vue.js,前端,elementui

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

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

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


參考鏈接https://www.jb51.net/article/234469.htm文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786620.html

到了這里,關(guān)于vue/Element UI 實(shí)現(xiàn)Element UI el-dialog 自由拖動(dòng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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)文章

  • Vue項(xiàng)目element-ui彈窗組件el-dialog、el-drawer,阻止點(diǎn)擊遮罩層關(guān)閉

    Vue項(xiàng)目element-ui彈窗組件el-dialog、el-drawer,阻止點(diǎn)擊遮罩層關(guān)閉

    效果圖: 我們只需要設(shè)置這兩個(gè) 屬性 append-to-body :close-on-click-modal=“false” 注意 : 這里的close-on-click-modal屬性前需要寫入 :

    2024年02月12日
    瀏覽(33)
  • element UI組件庫(kù)el-dialog內(nèi)程序刷新el-dialog內(nèi)組件方法

    1、牢牢記住,vue是基于JavaScript ES6的,所以只要刷新頁(yè)面里面data下的數(shù)據(jù),頁(yè)面會(huì)自動(dòng)刷新的。 所以這個(gè)數(shù)據(jù)是父頁(yè)面?zhèn)鹘oel-dialog的,要刷新父頁(yè)面的數(shù)據(jù),el-dialog頁(yè)面內(nèi)的組件就可以刷新了。 2、在頁(yè)面的組件處理后臺(tái)程序完成后,可以調(diào)用 that.$parent.$parent.【父頁(yè)面的方

    2024年02月13日
    瀏覽(27)
  • Element ui關(guān)閉el-dialog時(shí)清除數(shù)據(jù)

    如果是按叉叉關(guān)閉或者點(diǎn)表單以外空白處關(guān)閉的話 可以給el-dialog添加? ? 在methods里添加函數(shù) 如果是按取消按鈕清除數(shù)據(jù),也可以給取消按鈕綁定點(diǎn)擊事件,點(diǎn)擊取消則調(diào)用closeForm函數(shù)。 注意: 要為每個(gè) form-item 加上 prop 屬性,要不然無(wú)法清空 resetFields() 方法是重置表單,重

    2024年02月11日
    瀏覽(27)
  • 【element-ui】el-dialog改變寬度

    dialog默認(rèn)寬度為父元素的50%,這就導(dǎo)致在移動(dòng)端會(huì)非常的窄,如圖1,需要限定寬度。 解決方法:添加 custom-class 屬性,然后在style中編寫樣式, 注意 ,如果有 scoped 限定,需要加 ::v-deep

    2024年02月11日
    瀏覽(35)
  • element-ui的el-dialog,簡(jiǎn)單的封裝。

    element-ui的el-dialog,簡(jiǎn)單的封裝。

    el-dialog是使用率很高的組件 使用el-dialog很多都是按照文檔的例子,用一個(gè)變量控制是否顯示,再來(lái)一個(gè)變量控制標(biāo)題。 如果我這個(gè)對(duì)話框多個(gè)地方使用的話還要?jiǎng)?chuàng)建多個(gè)變量,甚至關(guān)閉之后還要清空一些變量,應(yīng)該可以簡(jiǎn)化一點(diǎn)。我寫vue的時(shí)候奉行的都是數(shù)據(jù)驅(qū)動(dòng),像剛才

    2024年02月12日
    瀏覽(29)
  • element ui中el-dialog如何自定義標(biāo)題,加圖標(biāo)
  • Vue系列第七篇:Element UI之el-main,el-table,el-dialog,el-pagination,el-breadcrumb等控件使用

    Vue系列第七篇:Element UI之el-main,el-table,el-dialog,el-pagination,el-breadcrumb等控件使用

    本篇實(shí)現(xiàn)主頁(yè)面功能,包括主頁(yè)面排版布局,學(xué)生管理模塊實(shí)現(xiàn),后臺(tái)接口實(shí)現(xiàn)等功能。 目錄 1.運(yùn)行效果 1.1登錄頁(yè)面 1.2主頁(yè)面 ?1.3學(xué)生管理 - 信息列表 1.4學(xué)生管理 - 信息管理 ?1.5學(xué)生管理 - 作業(yè)列表 1.6學(xué)生管理 -?作業(yè)管理 2.前端代碼 2.1 代碼結(jié)構(gòu) ?2.2 代碼實(shí)現(xiàn) 3.后端代碼

    2024年02月08日
    瀏覽(28)
  • Element UI中el-dialog中內(nèi)容超出自定義滾動(dòng)條

    Element UI中el-dialog中內(nèi)容超出自定義滾動(dòng)條

    2.1 dialog中嵌套div,給div設(shè)置高度,并且overflow屬性為auto,布局如下圖: 3.1sass或less寫法 3.2 原生寫法

    2024年02月15日
    瀏覽(23)
  • element-ui:多個(gè)el-dialog彈框切換會(huì)出現(xiàn)閃爍

    使用多個(gè)element-ui組件el-dialog彈框切換 打開A彈框,點(diǎn)擊關(guān)閉,緊接著打開B彈框 會(huì)出現(xiàn)一個(gè)明顯的閃爍 給第一個(gè)彈框關(guān)閉加一點(diǎn)延遲 參考 【ElementUI】dialog彈窗出現(xiàn)閃屏問題解決辦法

    2024年02月11日
    瀏覽(19)
  • element-ui中更換el-dialog彈窗中默認(rèn)的關(guān)閉按鈕

    element-ui中更換el-dialog彈窗中默認(rèn)的關(guān)閉按鈕

    在使用 element-ui 框架里的 el-dialog 組件時(shí),要修改彈窗里默認(rèn)的關(guān)閉圖標(biāo);如下圖所示:左邊是想要替換后的;右邊是組件默認(rèn)的關(guān)閉圖標(biāo); 通過檢查組件的元素;發(fā)現(xiàn)組件默認(rèn)的關(guān)閉是一個(gè)圖標(biāo);通過圖標(biāo)的形式展現(xiàn)的。 那就可以通過 CSS 隱藏當(dāng)前的圖標(biāo);然后在當(dāng)前圖標(biāo)

    2024年02月12日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包