jquery實現(xiàn)拖拽小方塊效果
今天來講一個很常用的拖拽功能,主要是利用一點css,js和jquery,很簡單但同時也很重要,掌握好才是最關(guān)鍵的!
下面來看下效果圖:
這里可以看到,在鼠標(biāo)hover的時候會有一個透明度的變化和一個盒子陰影!并且在右下角會實時的顯示出小方塊移動時橫縱坐標(biāo)的變化!

可以看到有一個盒子陰影

在鼠標(biāo)單擊按住的時候會變紅,然后可以拖動小塊隨意移動

我們在看代碼之前可以先了解下jquery中的基本知識(選擇器,css控制器什么的)和offset()和clientX,clientY。思路很簡單,就是分別監(jiān)聽鼠標(biāo)的 mousedown,mouseup,mousemove這三個事件,通過判斷div移動之前的坐標(biāo),div移動之后的坐標(biāo)(offset獲得)和鼠標(biāo)移動前后的坐標(biāo)(clientX和clientY獲得)判斷div在body里的具體坐標(biāo)位置,然后設(shè)置div在body里左邊和上邊的距離(left,top)。代碼思路在代碼里很詳細(xì)!希望大家好好理解!
附上代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>拖動圖片</title>
<style>
html {
height: 100%;
}
body {
margin: 0px;
padding: 0rem;
border: 0rem;
height: 100%;
width: 100%;
position: relative;
/* 取消默認(rèn)的輸入事件,不然會一直出現(xiàn)‘I'一樣的光標(biāo) */
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#drag {
height: 200px;
width: 200px;
background: teal;
border: none;
border-radius: 1rem;
/* 一定要是absolute */
position: absolute;
opacity: 0.8;
}
#drag:hover {
box-shadow: 0 8px 12px 0 rgba(16, 49, 231, 0.4);
opacity: 1;
cursor: pointer;
}
input {
width: 12rem;
height: 2rem;
font-size: 1.5rem;
border: 2px solid #aaa;
}
#input1 {
display: block;
position: absolute;
bottom: 1.2rem;
right: 1rem;
}
#input2 {
display: block;
position: absolute;
bottom: 1.2rem;
right: 16rem;
}
</style>
</head>
<body>
<div id="drag">
</div>
<input type="text" id="input1" name="y" placeholder="y軸的坐標(biāo)為">
<input type="text" id="input2" name="x" placeholder="x軸的坐標(biāo)為">
<!-- 引入內(nèi)部jquery,大家使用可以引入CDN -->
<script src="jquery-3.5.1.min.js"></script>
<script>
var client_x = 0;
var client_y = 0;
var offset_x = 0;
var offset_y = 0;
var moving = false;
// 利用jquery獲得div這個元素
var drag = $('#drag');
// 添加監(jiān)聽事件
drag.on({
// 鼠標(biāo)抬起事件
mouseup: function(e) {
moving = false;
// 為div添加一個css樣式
$("#drag").css("background", 'teal');
},
// 鼠標(biāo)按下事件
mousedown: function(e) {
moving = true;
// this代表的是 div
var offset = $(this).offset();
// offset() 方法設(shè)置或返回被選元素相對于文檔的偏移坐標(biāo)
offset_x = offset.left;
offset_y = offset.top;
// clientX 事件屬性返回當(dāng)事件被觸發(fā)時鼠標(biāo)指針相對于瀏覽器頁面的水平坐標(biāo)
client_x = e.clientX;
// clientX 事件屬性返回當(dāng)事件被觸發(fā)時鼠標(biāo)指針相對于瀏覽器頁面的垂直坐標(biāo)
client_y = e.clientY;
drag.css("background", 'rgb(179, 43, 19)');
},
// 鼠標(biāo)移動事件
mousemove: function(e) {
if (moving) {
// 為div添加一個css樣式
drag.css({
left: offset_x + (e.clientX - client_x),
top: offset_y + (e.clientY - client_y)
});
// 設(shè)置并顯示input標(biāo)簽內(nèi)x,y軸的坐標(biāo)
$(':input[name="x"]').val(offset_x + (e.clientX - client_x));
$(':input[name="y"]').val(offset_y + (e.clientY - client_y));
drag.css("cursor", "pointer");
}
}
});
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery的ztree仿windows文件新建和拖拽功能的實現(xiàn)代碼
zTree 是一個依靠 jQuery 實現(xiàn)的多功能 “樹插件”。優(yōu)異的性能、靈活的配置、多種功能的組合是 zTree 最大優(yōu)點。這篇文章主要介紹了jQuery的ztree仿windows文件新建和拖拽功能的實現(xiàn)代碼,需要的朋友可以參考下2018-12-12
JQuery 控制內(nèi)容長度超出規(guī)定長度顯示省略號
這篇文章主要介紹JQuery如何實現(xiàn)控制內(nèi)容長度超出規(guī)定長度顯示省略號,需要的朋友可以參考下2014-05-05
jQuery如何將選中的對象轉(zhuǎn)化為原始的DOM對象
在一個頁面上選擇元素返回的集合是jQuery對象而不是原始的DOM對象,那么如何將其轉(zhuǎn)為DOM對象呢?下面有個不錯的方法,大家可以嘗試操作下2014-06-06
jQuery EasyUI 中文API Layout(Tabs)
發(fā)布jQuery EasyUI 中文API—Layout(Tabs)總結(jié),需要的朋友可以參考下。2010-04-04
jQuery實現(xiàn)默認(rèn)是閉合的FAQ展開效果菜單
這篇文章主要介紹了jQuery實現(xiàn)默認(rèn)是閉合的FAQ展開效果菜單,涉及jQuery中slideUp及slideDown用法的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
input:checkbox多選框?qū)崿F(xiàn)單選效果跟radio一樣
checkbox是多選,怎么才能讓他變成單選,效果跟radio一樣呢,本菜鳥就自己寫了個小程序,代碼很簡單2014-06-06

