首页 > 其他分享 >vue-draggable跨iframe拖拽

vue-draggable跨iframe拖拽

时间:2023-08-23 09:57:16浏览次数:39  
标签:body el vue const draggable iframe return event

环境

  1. vue3
  2. "vuedraggable": "^4.1.0"

物料区

<draggable
      class="dragArea list-group components-draggable"
      :list="material"
      :group="{ name: 'formGroup', pull: 'clone', put: false }"
      item-key="name"
      ghost-class="ghost"
      :sort="false"
      :clone="cloneComponent"
      draggable=".components-item"
  >
    <template #item="{ element }">
      <div class="components-item m-1"
          style="height: 30px; padding: 10px; border: 1px solid; margin: 5px"
      >
        <div class="components-body">
          <span class="truncate">{{ element.name }}</span>
        </div>
      </div>
    </template>
  </draggable>

预览区


  <PreviewIframe>
    <draggable
        class="dragArea list-group components-draggable"
        :list="targetSource"
        group="formGroup"
        itemKey="id"
        item-key="name"
        ghost-class="ghost"
        :clone="cloneComponent"
        draggable=".components-item"
    >
      <template #item="{ element }">
        <div class="components-item m-1"
            style="height: 30px; padding: 10px; border: 1px solid; margin: 5px"
        >
          <div class="components-body">
            <span class="truncate">{{ element.name }}</span>
          </div>
        </div>
      </template>
    </draggable>
  </PreviewIframe>

iframe

<style lang="css">
iframe {
  width: 100%;
  height: 500px;
  border: 1px solid red;
  padding: 25px;
}
</style>

<script>
import { createApp, createVNode, h } from 'vue'

export default {
  render() {
    return h("iframe", {
      onl oad: () => {
        console.log(this.$el)
      },
    });
  },
  mounted() {
    this.renderChildren();
    this.$el.contentDocument.body.ondrop = function (event) {
      event.preventDefault();
      event.stopPropagation();
    };
  },
  data() {
    return {
      awaitingEdit: false,
    };
  },
  methods: {
    renderChildren() {
      const body = this.$el.contentDocument.body;
      const el = document.createElement('div')
      body.appendChild(el);

      const that = this;
      const previewApp = createApp({
        name: "previewApp",
        render() {
          return h("div", {
            class: "preview",
            style: "height: 100vh"
          }, that.$slots);
        },
      });
      previewApp.mount(el);
    },
  },
};
</script>

标签:body,el,vue,const,draggable,iframe,return,event
From: https://www.cnblogs.com/zhuxiang1633/p/17650318.html

相关文章

  • vue中$event的元素属性
    <template><div><button@click="clickFun($event)">点击</button></div></template><script>exportdefault{data(){return{}},methods:{check(event)......
  • 在vue中实现一个插件
    1、使用情景通过app.component()和app.directive()注册一到多个全局组件或自定义指令。通过app.provide()使一个资源可被注入进整个应用。向app.config.globalProperties中添加一些全局实例属性或方法一个可能上述三种都包含了的功能库(例如vue-router)。2、使用......
  • Vue 3.0 KO Vue 2.0
    作为国内最火的前端框架,Vue这几年的热度只增不减。上手简单、中文文档全,大厂面试也常考。最近和一位在字节跳动做前端 leader的朋友沟通,了解到现在的求职者有很多对Vue还是一知半解,往深了问几句就容易暴露,从而面试败北。熟练掌握Vue ,除了是进入大厂的必备技能,更是成为高级工程......
  • vue中watch和computed的区别
    computed中的console.log会执行吗?然而,需要注意的是,console.log语句在计算属性计算期间执行的结果将被打印到浏览器的开发者工具控制台中,并不会直接在页面上显示。如果你希望在页面上显示计算属性的值,可以将其绑定到模板中进行显示。computed的触发时机?在Vue中,computed属性的......
  • Vue学习笔记:Pinia Part01
    介绍Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。如果你熟悉组合式API的话,你可能会认为可以通过一行简单的 exportconststate=reactive({}) 来共享一个全局状态。对于单页应用来说确实可以,但如果应用在服务器端渲染,这可能会使你的应用暴露出一些安全漏洞......
  • vue拖拽组件的使用(vuedraggable)
    vuedraggable官方文档链接:https://www.itxst.com/vue-draggable/tutorial.html按装npmi-Svuedraggable页面引入importdraggablefrom"vuedraggable"注册组件components:{draggable},使用<template><div><el-popoverplacement=&q......
  • vue3父子组件通信小结
    父子组件中的attrsprops理解/继承首先,父组件可以给子组件传入属性、监听函数(类似onClick),class,style,id,总结起来就是大三类-属性,监听函数,样式!爷爷组件--有两个监听函数import{computed,defineComponent,reactive,ref}from"vue";import{css}from"@emotion/css"......
  • 中小学教育综合管理平台源码,vue2+Java+springboot框架开发
    智慧校园电子班牌软件是出于校园考勤管理以及班级校园信息展示为目的的显示系统软件,电子班牌系统主要用于中小学教育的综合管理平台,融合了多媒体技术、语音技术、人脸识别、信息发布、后台管理等多种技术。智慧班牌通过以云平台为基础,结合互联网、物联网系统进行校园管理,实现学校数......
  • vue-element-admin项目中tagView嵌入iframe不刷新重载
    vue-element-admin项目中tagView嵌入iframe不刷新重载最近使用vue-element-admin来开发项目,因为以前老项目太大,暂不重构,如要通过iframe嵌套在新项目中,通过router来重写url加载,但是业务需要切换菜单或者tagView不能刷新重载iframe页面,因此需要改造一、vue-element-admin是通过......
  • vue实现‘换一批’功能
    实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组<divclass="flex-align"@click="change"><span>换一批</span></div>data(){return{qList:[],//处理后的list......