基於vue.js 移動可視化,拖拽生成H5系統


效果預覽

功能簡介

     基於Vue.js(2.0)版本開發的,通過拖拽可視化的操作,生成H5的頁面,類似易企秀的工具,前端展示頁面運用了之前發布的 vue-animate-fullpage 插件進行動畫渲染。

    (vue-animate-fullpage 插件 請移步 文章:https://www.cnblogs.com/luobiao/p/13292205.html

有哪些功能?

     目前只能設置背景圖片、插入圖片、文本(文本設置字號、顏色)等,二期以后會逐步增加更多的功能。

有哪些動畫效果?

     目前采用的是開源的animate.css的動畫庫。

拖拽核心功能實現?

     通過自定義指令(v-drag)  ,加上該指令的元素,就可以實現拖拽。

 tips:新建自定義指令前需要清楚幾個屬性。

   pageX 、pageY::鼠標指針的位置,文檔的坐標。

   offsetLeft:指 元素 距離左方或上層控件左側的距離。

   offsetTop: 指 元素 距離上方或上層控件頂部的距離。

直接上代碼:

  js代碼:

 //在main.js中自定義一個全局指令v-drag

Vue.directive('drag', {
  //1.指令綁定到元素上回立刻執行bind函數,只執行一次
  //2.每個函數中第一個參數永遠是el,表示綁定指令的元素,el參數是原生js對象
  //3.通過el.focus()是無法獲取焦點的,因為只有插入DOM后才生效
  bind: function (el, binding) {
    let oDiv = el; //獲取當前元素
    let firstTime = '', lastTime = '';
    oDiv.style.position = "absolute"; //要實現拖拽,要給元素添加絕對定位(如果元素css已經加上了,此處可以省略)
    el.onmousedown = function (e) {
  //用元素距離視窗的X、Y坐標,減去當前元素最近的相對定位父元素的left、top值
      var disX = e.pageX - el.offsetLeft;
      var disY = e.pageY - el.offsetTop;
      oDiv.setAttribute('ele-flag', false)// 給當前元素添加屬性,用於元素狀態的判斷
      oDiv.setAttribute('draging-flag', true)
      firstTime = new Date().getTime();
      document.onmousemove = function (e) {
        el.style.left = e.pageX - disX + 'px';//獲得當前元素拖拽后的位置坐標
        el.style.top = e.pageY - disY + 'px';
        binding.value({ left: e.pageX - disX, top: e.pageY - disY }) //將拖拽后最新的坐標傳遞回組件內,方便組件獲取使用
        return false;
      }
      document.onmouseup = function (event) {
        document.onmousemove = document.onmouseup = null;  //清除 onmousemove 事件
        lastTime = new Date().getTime(); 
        if ((lastTime - firstTime) > 200) {
          oDiv.setAttribute('ele-flag', true)
          event.stopPropagation(); //阻止冒泡
        }
        setTimeout(function () {
          oDiv.setAttribute('draging-flag', false)
        }, 100)
      }
    }
  },

})

 組件代碼

//html代碼 

 <div id="app">

  <div class="drag-box"  v-drag="greet"></div> <!--v-drag是自定義指令,加上該指令的元素,可以實現拖拽-->  此處 的greet 為接收自定義指令回傳坐標

</div>

js 代碼

在vue的methods生命周期中調用greet 即可。

methods: {
    greet(val){
          console.log(val);
      }
   }

 

附上GitHub地址:https://github.com/ALazyTiger/alazytigerDragH5.git

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM