HTML实现拖拉拽放置功能的例子

本文介绍了如何使用HTML5和JavaScript创建一个简单的拖放功能,包括`drag`、`drop`和`ondragover`事件,展示了如何将灰色div元素拖放到背景为浅灰色的矩形框中并显示放置效果。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"> 
<title>拖拉拽</title>
<style type="text/css">
#div1 {width:350px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
function allowDrop(ev)
{
	ev.preventDefault();
}

function drag(ev)
{
	ev.dataTransfer.setData("Text",ev.target.id);
}

function drop(ev)
{
	ev.preventDefault();
	var data=ev.dataTransfer.getData("Text");
	ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<p>拖动 灰色div 到矩形框中:</p>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<div style="width: 200px; height: 200px; background-color: #aaaaaa;" draggable="true" ondragstart="drag(event)" id="div2"></div>

</body>
</html>

在这里插入图片描述拖拉效果
在这里插入图片描述
放置效果
在这里插入图片描述

前端实现拖拉功能有多种方式,以下为你详细介绍: ### 原生 JS 实现 原生 JS 支持拖拉,可将元素的 `draggable` 属性设置为 `"true"`,然后调用相应函数。不过原生 JS 功能不够完善,使用时需要改造的地方较多。示例代码如下,设置元素的属性以及绑定开始的事件: ```html <div v-for="(item, index) in zjList" :key="index" draggable="true" @dragstart="dragStart($event, item.val)"> </div> ``` 这里为每个 `div` 元素添加了 `draggable="true"` 属性,使其可,并绑定了 `dragStart` 事件处理函数 [^1][^2]。 ### 使用第三方插件 在 Vue 项目中,可选用成熟的第三方插件来实现拖拉功能。 #### vue-draggable-next 若主项目采用的是 Vue 3,经过对比可选择 `vue-draggable-next` 这个插件。例如实现互相拖拉的示例代码如下: ```vue <template> <div> <div> <draggable group="people" v-model="list1"> <div v-for="item in list1" :key="item.id">{{item.name}}</div> </draggable> </div> <div> <draggable group="people" v-model="list2"> <div v-for="item in list2" :key="item.id">{{item.name}}</div> </draggable> </div> </div> </template> <script> import draggable from 'vuedraggable'; export default { components: {draggable}, data() { return { list1: [ {id: 1, name: 'John'}, {id: 2, name: 'Alice'} ], list2: [ {id: 3, name: 'Bob'}, {id: 4, name: 'Eve'} ] }; } }; </script> ``` 此代码实现了两个列表之间元素的互相功能 [^1][^3]。 #### Vue 表单生成器(Form Generator) Vue 表单生成器(Form Generator)不仅提供 21 种字段类型,还可以使用自定义字段进行扩展。生成的模板对 Bootstrap 友好,并且能轻松自定义样式。使用示例如下: ```bash npm install vue-form-generator ``` ```javascript // 全局引入 import VueFormGenerator from "vue-form-generator"; import "vue-form-generator/dist/vfg.css"; Vue.use(VueFormGenerator) // 组件中引入 <vue-form-generator :schema="schema" :model="model" :options="formOptions"></vue-form-generator> import VueFormGenerator from "vue-form-generator"; export default { components: { "vue-form-generator": VueFormGenerator.component }, data() { return { model: { id: 1, name: 'John Doe', password: 'J0hnD03!x4', skills: ['Javascript', 'VueJS'], email: 'john.doe@gmail.com', status: true }, schema: { fields: [ { type: 'input', inputType: 'text', label: 'ID (disabled text field)', model: 'id', readonly: true, disabled: true } ] }, formOptions: { validateAfterLoad: true, validateAfterChanged: true, validateAsync: true } }; } }; ``` 该插件可用于表单元素的拖拉等操作 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值