對頁面某個節點的拖曳(原生js和vue專案)
阿新 • • 發佈:2018-12-03
HTML5中的draggable
draggable 屬性規定元素是否可拖動(連結和影象預設是可拖動的。)
/// true:規定元素是可拖動的,false:規定元素是不可拖動的,auto:使用瀏覽器的預設特性。
<element draggable="true|false|auto">
在拖放的過程中會觸發以下事件:
- 在拖動目標上觸發事件 (源元素):
ondragstart
- 使用者開始拖動元素時觸發ondrag
- 元素正在拖動時觸發ondragend
- 使用者完成元素拖動後觸發
釋放目標時觸發的事件:
ondragenter
ondragover
- 當某被拖動的物件在另一物件容器範圍內拖動時觸發此事件ondragleave
- 當被滑鼠拖動的物件離開其容器範圍內時觸發此事件ondrop
- 在一個拖動過程中,釋放滑鼠鍵時觸發此事件
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>ondrag相關事件</title>
<style>
.droptarget {
float: left;
width: 100px;
height: 35px;
margin: 15px;
padding: 10px;
border: 1px solid #aaaaaa;
}
</style>
</head>
<body> < p>在兩個矩形框中來回拖動 p 元素:</p>
<div class="droptarget">
<p draggable="true" id="dragtarget">拖動!!!</p>
</div>
<div class="droptarget"></div>
<p style="clear:both;"><strong>注意:</strong>Internet Explorer 8 及更早 IE 版本或 Safari 5.1 及更早版本的瀏覽器不支援 drag 事件。</p>
<p id="demo"></p>
<script>
///* 拖動時觸發*/
document.addEventListener("dragstart", function(event) {
//dataTransfer.setData()方法設定資料型別和拖動的資料
event.dataTransfer.setData("Text", event.target.id);
// 拖動 p 元素時輸出一些文字
document.getElementById("demo").innerHTML = "開始拖動 p 元素.";
//修改拖動元素的透明度
event.target.style.opacity = "0.4";
});
//在拖動p元素的同時,改變輸出文字的顏色
document.addEventListener("drag", function(event) {
document.getElementById("demo").style.color = "red";
});
// 當拖完p元素輸出一些文字元素和重置透明度
document.addEventListener("dragend", function(event) {
document.getElementById("demo").innerHTML = "完成 p 元素的拖動";
event.target.style.opacity = "1";
});
/* 拖動完成後觸發 */
// 當p元素完成拖動進入droptarget,改變div的邊框樣式
document.addEventListener("dragenter", function(event) {
if ( event.target.className == "droptarget" ) {
event.target.style.border = "3px dotted red";
}
});
// 預設情況下,資料/元素不能在其他元素中被拖放。對於drop我們必須防止元素的預設處理
document.addEventListener("dragover", function(event) {
event.preventDefault();
});
// 當可拖放的p元素離開droptarget,重置div的邊框樣式
document.addEventListener("dragleave", function(event) {
if ( event.target.className == "droptarget" ) {
event.target.style.border = "";
}
});
document.addEventListener("drop", function(event) {
event.preventDefault();
if ( event.target.className == "droptarget" ) {
document.getElementById("demo").style.color = "";
event.target.style.border = "";
var data = event.dataTransfer.getData("Text");
event.target.appendChild(document.getElementById(data));
}
});
</script>
</body>
</html>
vue專案中的Vue.Draggable
1.安裝
npm install vuedraggable
2.引入
import draggable from ‘vuedraggable’
3.註冊
components:{
draggable
}
4.使用
<draggable v-model="itemlis"
//開始移動方法
:move="getdata"
@update="datadragEnd"
//引數配置
:options="{animation: 60,handle:'.drag-icon'}"
>
<transition-group>
<el-row class="album-list-list-item" v-for="(item,index) in itemlis" :key="item.id">
<el-col :span="13">
<div class="grid-content ">
<i class="icon drag-icon iconfont icon-Icon-tuozhuai"></i>
<el-checkbox v-model="item.checked" :value="item.id"></el-checkbox> <span class="album-info-net">{{item.net}}</span>
</div>
</el-col>
<el-col :span="4">
<div class="grid-content ">
<span>{{item.time}}</span>
</div>
</el-col>
<el-col :span="4">
<el-popover
placement="left-start"
visible-arrow=false
width="120"
trigger="hover"
>
<div class="code-img">
<img src="../assets/images/1.png"/>
</div>
<span slot="reference">{{item.wqcode}}</span>
</el-popover>
</el-col>
<el-col :span="3">
<div class="grid-content album-l-l-tool ">
<div class="more-tip-op">
<el-dropdown>
<span class="el-dropdown-link"><em class="el-icon-more"></em></span>
<el-dropdown-menu slot="dropdown" >
<el-dropdown-item :data-url="item.opUrl.removeUrl" @click.native="moveTo(item,$event)">移動</el-dropdown-item>
<el-dropdown-item :data-url="item.opUrl.copyUrl" @click.native="copyTo(item,$event)">複製</el-dropdown-item>
<el-dropdown-item @click.native="itemDel(index,$event)" :data-url="item.opUrl.delUrl">刪除 </el-dropdown-item>
<el-dropdown-item :data-url="item.opUrl.exportUrl">匯出</el-dropdown-item>
<el-dropdown-item :data-url="item.opUrl.editName" @click.native="getEditDialog(item,$event)">編輯</el-dropdown-item>
<el-dropdown-item @click.native="getCodeDialog(item,$event)" >檢視二維碼</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</el-col>
</el-row>
</transition-group>
</draggable>