中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript實現拖拽效果

發布時間:2020-10-14 09:38:31 來源:腳本之家 閱讀:174 作者:_kaze 欄目:web開發

要實現JavaScript的拖拽效果,首先我們需要知道事件對象幾個有關于實現拖拽效果的坐標

獲取事件對象 var e = e || window.event;

根據需求需要用到的拖拽效果的坐標

clientX:鼠標點擊位置相對于瀏覽器可視區域的水平偏移量(不會計算水平滾動的距離)

clientY:鼠標點擊位置相對于瀏覽器可視區域的垂直偏移量(不會計算垂直滾動條的距離)

offsetX:鼠標點擊位置相對于觸發事件對象的水平距離

offsetY:鼠標點擊位置相對于觸發事件對象的垂直距離

pageX:鼠標點擊位置相對于網頁左上角的水平偏移量,也就是clientX加 上水平滾動條的距離

pageY:鼠標點擊位置相對于網頁左上角的垂直平偏移量,也就是clientY加上垂直滾動條的距離

offsetLeft:如果父元素中有定位的元素,那么就返回距離當前元素最近的定位元素邊緣的距離

offsetTop:如果父元素中沒有定位元素,那么就返回相對于body左邊緣距離

獲取元素自身大小:offsetWidth和offsetHeight / clientWidth和clientHeight

offsetWidth和clientWidth的區別:就是offsetWidth包含邊框,clientWidth不包含邊框

實現拖拽需要用到:clientWidth、clientHeight、clientX、clientY、offsetLeft、offsetTop

首先搭建好html結構和css樣式

<div class="wrap">
 <div class="cover">

 </div>
</div>
* {
  margin: 0;
  padding: 0;
 }
 
 .wrap {
  width: 500px;
  height: 500px;
  border: 1px solid deeppink;
  position: relative;
  margin: 50px auto;
 }
 
 .cover {
  width: 150px;
  height: 150px;
  background: rgba(200, 7, 99, 0.5);
  display: none;
  position: absolute;
  left: 0;
  top: 0;
  cursor: move;
 }

注意:需要給大盒子和小盒子進行定位:子絕父相

接下來就JavaScript代碼

<script>
 var wrap = document.querySelector(".wrap");
 var cover = document.querySelector(".cover");
 wrap.onmouseover = function() {
 cover.style.display = "block";
 wrap.onmousemove = function(e) {
  var e = e || window.event;
  var x1 = e.clientX;
  var y1 = e.clientY;
//這里獲取到的e.clientX和e.clientY,可以看情況和需求改為e.pageX和e.pageY  
  var halfWidth = cover.clientWidth / 2;
  var halfHeight = cover.clientHeight / 2;
  var wrapLeft = wrap.offsetLeft;
  var wrapTop = wrap.offsetTop;
  var l = x1 - wrapLeft - halfWidth;
  var t = y1 - wrapTop - halfHeight;

  if (l <= 0) {
  l = 0
  }
  if (l >= wrap.clientWidth - cover.clientWidth) {
  l = wrap.clientWidth - cover.clientWidth
  }
  if (t <= 0) {
  t = 0
  }
  if (t >= wrap.clientHeight - cover.clientHeight) {
  t = wrap.clientHeight - cover.clientHeight
  }
  cover.style.left = l + "px";
  cover.style.top = t + "px"
 }
 }
 wrap.onmouseout = function() {
 cover.style.display = "none";
 }
</script>
var halfWidth = cover.clientWidth / 2;
var halfHeight = cover.clientHeight / 2;
var wrapLeft = wrap.offsetLeft;
var wrapTop = wrap.offsetTop;
var l = x1 - wrapLeft - halfWidth;
var t = y1 - wrapTop - halfHeight;
//限制范圍
  if (l <= 0) {
    l = 0
   }
   if (l >= wrap.clientWidth - cover.clientWidth) {
    l = wrap.clientWidth - cover.clientWidth
   }
   if (t <= 0) {
    t = 0
   }
   if (t >= wrap.clientHeight - cover.clientHeight) {
    t = wrap.clientHeight - cover.clientHeight
   }

注意:這里要限制小盒子在大盒子之間移動的范圍,左上角的限制,當小盒子超出范圍時,將0賦值給l和t。右下角小盒子移動的范圍在大盒子寬度減去小盒子的寬度。
其中為了使鼠標一直處于小盒子(cover)的最中間,需要減去小盒子寬度的一半。
再減去大盒子距離頁面左邊的邊距和上邊的邊距就可以得到坐標

只要鼠標移入大盒子中,就能直接拖拽小盒子,并且鼠標一直處于小盒子的最中間。這樣便完成了簡單的拖拽效果。

JavaScript實現拖拽效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

特克斯县| 民丰县| 沁源县| 遂昌县| 东明县| 正蓝旗| 沧州市| 许昌市| 呼和浩特市| 宿松县| 榆林市| 咸宁市| 汾西县| 枣阳市| 大城县| 淅川县| 新田县| 攀枝花市| 五河县| 冕宁县| 扎囊县| 东宁县| 瑞金市| 卢氏县| 淮南市| 盖州市| 曲阳县| 错那县| 清河县| 沙河市| 怀柔区| 富平县| 汾西县| 高州市| 内乡县| 门源| 德化县| 石嘴山市| 赤壁市| 高雄县| 姜堰市|