最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    正文概述 掘金(zhangzp)   2021-03-21   1281

    前言

    这篇文章主要来分享下我以前用 Vue3 写的一个组件,

    项目地址 : Vue3DraggableResizable

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    组件功能

    • 支持拖拽和缩放,可分别定义开启或关闭

    • 自定义缩放句柄(缩放时共有八个方位可操作,可分别定义开启或关闭)

    • 可将组件的拖动和缩放限制在其父节点内

    • 可自定义组件内各种类名

    • 可配合内置的DraggableContainer组件方便地实现参考线以及自动吸附功能。

    该组件所支持的参数和事件加起来有几十种,可进行各种配置,具体可查看Github的详细文档。

    下面我来介绍下使用方式。

    基本功能

    首先要注册组件:

    // main.js
    import { createApp } from 'vue'
    import App from './App.vue'
    import Vue3DraggableResizable from 'vue3-draggable-resizable'
    //需引入默认样式
    import 'vue3-draggable-resizable/dist/Vue3DraggableResizable.css'
    
    // 你将会获得一个名为Vue3DraggableResizable的全局组件
    createApp(App).use(Vue3DraggableResizable).mount('#app')
    

    执行use(Vue3DraggableResizable)后将会全局注册两个组件:Vue3DraggableResizableDraggableContainerVue3DraggableResizable是拖拽缩放用的组件,DraggableContainer可用来实现参考线和自动吸附。

    注册后就可以使用了:

    <template>
      <div id="app">
        <div class="parent">
          <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
        </div>
      </div>
    </template>
    
    <script>
      import { defineComponent } from 'vue'
    
      export default defineComponent({
        data() {
          return {
            msg: 'Hello World. Hello World. Hello World.'
          }
        }
      })
    </script>
    <style lang="less" scoped>
      .parent {
        width: 300px;
        height: 300px;
        position: absolute;
        top: 100px;
        left: 200px;
        position: relative;
        border: 1px solid #000;
      }
    </style>
    

    很简单,直接使用即可,可以在Vue3DraggableResizable内放任何东西。

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    也可以锁定比例,只需要传入:lockAspectRatio="true"参数就可以了:

    <Vue3DraggableResizable :lockAspectRatio="true">
      {{ msg }}
    </Vue3DraggableResizable>
    

    也可以让组件只在 X 轴上移动或只在 Y 轴上移动,传入disabledXdisabledY即可:

    <Vue3DraggableResizable :disabledX="true"> {{ msg }} </Vue3DraggableResizable>
    

    可通过parent属性控制组件是否只能在其父节点内移动:

    <Vue3DraggableResizable :parent="true"> {{ msg }} </Vue3DraggableResizable>
    

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    除了我介绍的这几个,还有其他很多功能,感兴趣的话可以去 GitHub 上看详细的文档。

    下面我介绍下参考线和吸附对齐的功能。

    参考线、吸附对齐

    这个功能需要配合DraggableContainer组件一起使用。

    <template>
      <div id="app">
        <div class="parent">
          <DraggableContainer>
            <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
            <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
          </DraggableContainer>
        </div>
      </div>
    </template>
    
    <script>
      import { defineComponent } from 'vue'
    
      export default defineComponent({
        data() {
          return {
            msg: 'Hello World. Hello World. Hello World.'
          }
        }
      })
    </script>
    <style lang="less" scoped>
      .parent {
        width: 300px;
        height: 300px;
        position: absolute;
        top: 100px;
        left: 200px;
        position: relative;
        border: 1px solid #000;
        .vdr-container {
          background-color: #999;
        }
      }
    </style>
    

    在刚才的基础上,直接用DraggableContainer组件套一下就可以了。其子组件Vue3DraggableResizable在移动时候就会自动吸附。

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    可以使用adsorbParent属性,该属性用来控制靠近父元素边缘时,是否自动吸附对齐,默认为true

    <template>
      <div id="app">
        <div class="parent">
          <DraggableContainer :adsorbParent="true">
            <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
          </DraggableContainer>
        </div>
      </div>
    </template>
    

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    你也可以通过adsorbColsadsorbRows自定义列或行的校准线,元素在靠近这些线时,会产生吸附,

    <DraggableContainer :adsorbCols="[10, 50, 100]" :adsorbParent="false">
      <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
    </DraggableContainer>
    

    用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    也可以修改参考线颜色:

    <DraggableContainer :referenceLineColor="#0f0">
      <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
    </DraggableContainer>
    

    当然也可以不显示参考线:

    <DraggableContainer :referenceLineVisible="false">
      <Vue3DraggableResizable> {{ msg }} </Vue3DraggableResizable>
    </DraggableContainer>
    

    参考线虽然不显示,但是自动吸附仍然生效。

    最后

    这是去年写的一个项目,现在拿出来分享下,如果在使用中有什么问题的话,欢迎在评论区或者 GitHub 上和我交流。


    看到这里就点个赞吧,感谢~~


    起源地下载网 » 用Vue3造个轮子吧:拖拽缩放组件,支持吸附对齐,实时参考线

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    项目下载下来,启动报错了
    回复(0)

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元