javascript基礎(滑鼠事件拖拽,setCapture()方法)(三十六)
1.大概實現拖拽
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box1{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
}
#box2{
width: 100px;
height: 100px;
background-color: yellow;
position: absolute;
top: 200px;
left: 500px;
}
</style>
<script type="text/javascript">
window.onload = function(){
/*
* 使滑鼠可以在頁面中來拖拽box1
*
* 拖拽的流程:
* 1.當滑鼠在元素上按下時,開始拖拽 onmousedown
* 2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
* 3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
*/
//1.當滑鼠在元素上按下時,開始拖拽 onmousedown
//為box1繫結一個滑鼠按下的事件
var box1 = document.getElementById("box1");
box1.onmousedown = function(){
//2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
//為document繫結一個滑鼠移動的事件
document.onmousemove = function(event){
event = event || window.event;
//獲取滑鼠的座標
var left = event.clientX;
var top = event.clientY;
//修改box1的位置
box1.style.left = left + "px";
box1.style.top = top + "px";
};
//3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
document.onmouseup = function(){
//當滑鼠鬆開時,將元素固定在當前位置,取消document的onmousemove事件
document.onmousemove = null;
//onmouseup事件只需要執行一次,執行過一次以後就沒有存在的意義了
document.onmouseup = null;
};
};
};
</script>
</head>
<body>
<div id="box1"></div>
<div id="box2"></div>
</body>
</html>
2.完善一:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box1{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
}
#box2{
width: 100px;
height: 100px;
background-color: yellow;
position: absolute;
top: 200px;
left: 500px;
}
</style>
<script type="text/javascript">
window.onload = function(){
/*
* 使滑鼠可以在頁面中來拖拽box1
*
* 拖拽的流程:
* 1.當滑鼠在元素上按下時,開始拖拽 onmousedown
* 2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
* 3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
*/
//1.當滑鼠在元素上按下時,開始拖拽 onmousedown
//為box1繫結一個滑鼠按下的事件
var box1 = document.getElementById("box1");
box1.onmousedown = function(event){
event = event || window.event;
//設定box1捕獲所有的滑鼠按下的事件
//在chrome中沒有setCapture()和releaseCapture()方法
//所以呼叫會導致瀏覽器報錯
/*if(box1.setCapture){
box1.setCapture();
}*/
box1.setCapture && box1.setCapture();
//求元素的偏移量
//clientX - offsetLeft
var ol = event.clientX - box1.offsetLeft;
var ot = event.clientY - box1.offsetTop;
/*
* 目前我們的元素的左上角和滑鼠指標重合,
* 我們希望我們點選元素時,滑鼠和元素的相對的位置保持不變
*/
//2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
//為document繫結一個滑鼠移動的事件
document.onmousemove = function(event){
event = event || window.event;
//獲取滑鼠的座標
var left = event.clientX - ol;
var top = event.clientY - ot;
//修改box1的位置
box1.style.left = left + "px";
box1.style.top = top + "px";
};
//3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
document.onmouseup = function(){
//當滑鼠鬆開時,將元素固定在當前位置,取消document的onmousemove事件
document.onmousemove = null;
//onmouseup事件只需要執行一次,執行過一次以後就沒有存在的意義了
document.onmouseup = null;
/*if(box1.releaseCapture){
//設定box1不再對所有的事件進行捕獲
box1.releaseCapture();
}*/
box1.releaseCapture && box1.releaseCapture();
};
/*
* 當我們在瀏覽器中選中一個文字或一個內容並拖動時,瀏覽器會自動去搜尋引擎中搜尋該內容
* 但是這個行為的出現會導致拖拽功能出現異常,這一行為是瀏覽器的預設行為
* 如果不希望發生該行為,則可以在onmousedown事件中取消預設行為
*
* 但是這個方法對IE8不起作用
*/
return false;
};
};
</script>
</head>
<body>
我是一段文字
<div id="box1"></div>
<div id="box2"></div>
</body>
</html>
2.1.setCapture()方法測試:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
window.onload = function(){
//為兩個按鈕繫結單擊響應函式
var btn01 = document.getElementById("btn01");
var btn02 = document.getElementById("btn02");
btn01.onclick = function(){
alert(1);
}
btn02.onclick = function(){
alert(2);
}
/*
* 當元素設定setCapture()以後
* 元素將會自動將下一次滑鼠點選相關的事件捕獲到自身上
*/
btn01.setCapture();
};
</script>
</head>
<body>
<button id="btn01">按鈕1</button>
<button id="btn02">按鈕2</button>
</body>
</html>
3.完善二
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box1 {
width: 100px;
height: 100px;
background-color: red;
position: absolute;
}
#box2 {
width: 100px;
height: 100px;
background-color: yellow;
position: absolute;
top: 200px;
left: 500px;
}
</style>
<script type="text/javascript">
window.onload = function() {
/*
* 使滑鼠可以在頁面中來拖拽box1
*
* 拖拽的流程:
* 1.當滑鼠在元素上按下時,開始拖拽 onmousedown
* 2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
* 3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
*/
//1.當滑鼠在元素上按下時,開始拖拽 onmousedown
//為box1繫結一個滑鼠按下的事件
var box1 = document.getElementById("box1");
drag(box1);
var box2 = document.getElementById("box2");
drag(box2);
var img1 = document.getElementById("img1");
drag(img1);
};
/*
* 提取一個可以拖拽任意元素的函式
* obj 要拖拽的元素
*/
function drag(obj) {
obj.onmousedown = function(event) {
event = event || window.event;
//設定box1捕獲所有的滑鼠按下的事件
//在chrome中沒有setCapture()和releaseCapture()方法
//所以呼叫會導致瀏覽器報錯
/*if(box1.setCapture){
box1.setCapture();
}*/
obj.setCapture && obj.setCapture();
//求元素的偏移量
//clientX - offsetLeft
var ol = event.clientX - obj.offsetLeft;
var ot = event.clientY - obj.offsetTop;
/*
* 目前我們的元素的左上角和滑鼠指標重合,
* 我們希望我們點選元素時,滑鼠和元素的相對的位置保持不變
*/
//2.當滑鼠移動時,元素跟隨滑鼠移動 onmousemove
//為document繫結一個滑鼠移動的事件
document.onmousemove = function(event) {
event = event || window.event;
//獲取滑鼠的座標
var left = event.clientX - ol;
var top = event.clientY - ot;
//修改box1的位置
obj.style.left = left + "px";
obj.style.top = top + "px";
};
//3.當滑鼠鬆開時,元素固定在當前位置,拖拽結束 onmouseup
document.onmouseup = function() {
//當滑鼠鬆開時,將元素固定在當前位置,取消document的onmousemove事件
document.onmousemove = null;
//onmouseup事件只需要執行一次,執行過一次以後就沒有存在的意義了
document.onmouseup = null;
/*if(box1.releaseCapture){
//設定box1不再對所有的事件進行捕獲
box1.releaseCapture();
}*/
obj.releaseCapture && obj.releaseCapture();
};
/*
* 當我們在瀏覽器中選中一個文字或一個內容並拖動時,瀏覽器會自動去搜尋引擎中搜尋該內容
* 但是這個行為的出現會導致拖拽功能出現異常,這一行為是瀏覽器的預設行為
* 如果不希望發生該行為,則可以在onmousedown事件中取消預設行為
*
* 但是這個方法對IE8不起作用
*/
return false;
};
}
</script>
</head>
<body>
我是一段文字
<div id="box1"></div>
<div id="box2"></div>
<img id="img1" style="position: absolute;" src="img/an.jpg"/>
</body>
</html>
相關文章
- 滑鼠拖拽事件事件
- 詳解javascript拖拽(一)基礎介紹JavaScript
- javascript事件基礎知識JavaScript事件
- JavaScript基礎之事件eventJavaScript事件
- JS滑鼠事件完成元素拖拽(簡單-高階)JS事件
- javaScript事件(五)事件型別之滑鼠事件JavaScript事件型別
- javascript基礎(事件物件)(三十一)JavaScript事件物件
- javascript基礎(鍵盤事件)(三十八)JavaScript事件
- javascript基礎(事件的委派)(三十三)JavaScript事件
- javascript基礎(事件的冒泡)(三十二)JavaScript事件
- JavaScript滑鼠中鍵滾動事件JavaScript事件
- JavaScript進階系列07,滑鼠事件JavaScript事件
- javascript基礎(滾輪的事件)(三十七)JavaScript事件
- javascript基礎(事件的傳播)(三十五)JavaScript事件
- javascript基礎(事件的繫結)(三十四)JavaScript事件
- Javascript滑鼠滾輪事件相容寫法JavaScript事件
- JavaScript基礎知識(Date 的方法)JavaScript
- JavaScript的基礎語法及DOM元素和事件JavaScript事件
- drag &drop 拖拽事件事件
- drag & drop 拖拽事件事件
- SystemUI 拖拽事件分析SystemUI事件
- 基於javascript的拖拽類封裝^o^JavaScript封裝
- JS基礎入門篇(三十六)—物件導向( 三 )JS物件
- JavaScript拖拽效果JavaScript
- 前端筆記之JavaScript(十一)event&BOM&滑鼠/盒子位置&拖拽/滾輪前端筆記JavaScript
- 滑鼠事件事件
- win10滑鼠左鍵拖拽不了圖示怎麼辦 win10電腦滑鼠左鍵拖拽不瞭解決方法Win10
- JavaScript和JQuery的滑鼠mouse事件冒泡處理JavaScriptjQuery事件
- jQ基礎篇–$(document).ready()和JavaScript onload事件JavaScript事件
- JS基礎 ---事件JS事件
- javascript基礎JavaScript
- angualr實現滑鼠拖拽排序功能排序
- 『心善淵』Selenium3.0基礎 — 12、Selenium操作滑鼠和鍵盤事件事件
- javascript基礎(DOM物件概述,事件,文件載入)(二十五)JavaScript物件事件
- Java基礎系列(三十六):泛型中需要注意的地方Java泛型
- 如何使用 JavaScript 程式碼建立虛擬滑鼠點選事件JavaScript事件
- Javascript基礎之-thisJavaScript
- JavaScript基礎原理JavaScript