内容简介:顾名思义,可拖拉效果便是让网页上的元素可以被拖拉到别的地方。其基本逻辑是,在按下滑鼠并拖动元素时,改变元素的文件。很明显,这需要JavaScript监听滑鼠按下的事件(onmousedown)来实现,因此,这个功能的重点就在JavaScript的部分。现在就来看看W3Schools是如何完成这一功能。可拖拉效果的重点全在JavaScript上。JavaScript分成四个函数来完成:
顾名思义,可拖拉效果便是让网页上的元素可以被拖拉到别的地方。其基本逻辑是,在按下滑鼠并拖动元素时,改变元素的文件。很明显,这需要JavaScript监听滑鼠按下的事件(onmousedown)来实现,因此,这个功能的重点就在JavaScript的部分。现在就来看看W3Schools是如何完成这一功能。
视频连结
可拖拉效果
可拖拉效果的重点全在JavaScript上。JavaScript分成四个函数来完成:
-
dragElement(elmnt):判断可拖拉区域。 -
dragMouseDown(e):当滑鼠在可拖拉区域按下时,记录当下元素位置,若接下来滑鼠移动,可执行elementDrag(e);若滑鼠松开则执行closeDragElement()。 -
elementDrag(e):拖动时执行,计算位置差,为元素设定新位置 -
closeDragElement:滑鼠松开时,清除document.onmouseup和document.onmousemove。
可拖拉效果HTML和CSS
由于HTML和CSS的部分比较简单,这里一并放上:
HTML
<div id="mydiv"> <div id="mydivheader">Click here to move</div> <p>Move</p> <p>this</p> <p>DIV</p> </div>
CSS
#mydiv {
position: absolute;
z-index: 9;
background-color: #f1f1f1;
text-align: center;
border: 1px solid #d3d3d3;
}
#mydivheader {
padding: 10px;
cursor: move;
z-index: 10;
background-color: #2196F3;
color: #fff;
}
这些设定主要是为了元素的外观,唯一必要的是父级容器 mydive 的 position: absolute; ,这样子级的 mydivheader 的位置便是
可拖拉效果JavaScript
以下是JavaScript的部分,一共有4个函数,后面会逐一讲解:
dragElement(document.getElementById("mydiv"));
function dragElement(elmnt) {
var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
if (document.getElementById(elmnt.id + "header")) {
document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown;
} else {
elmnt.onmousedown = dragMouseDown;
}
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
}
}
首先,将 mydiv 作为参数(elmnt)传入 dragElement 。
在 dragElement 当中判断是否存在 mydivheader ,若存在,则针对 mydivheader 的 onmousedown 处理拖拉;若不存在,则针对 mydiv 的 onmousedown 处理拖拉。
dragMouseDown(e) 是处理拖拉的主体函数。一般跟这个事件相关的数据会透过参数 e 传入,但较旧的IE(IE8及以下)则会透过 window.event 传入,因此,第一行的意思是:若存在参数 e 就直接使用;若不存在,就使用 window.event 。而第二行则是取消这个事件的预设动作,因为我们要主动控制接下来的动作。接着,将元素(mydivheader)的当前位置,也就是初始位置,记录下来。最后根据接下来发生动作执行不同的函数。如果滑鼠移动了,就执行 elementDrag ;松开了,就执行 closeDragElement 。
elementDrag(e) 是对应滑鼠按下后发生移动的处理。同上先取消事件的预设动作,再记录下位置差(X轴和Y轴),并且用新的位置作为初始位置。最后根据位置差更改元素的位置。要注意,这里使用旧的位置减去新的位置(如 pos1 = pos3 - e.clientX ),所以计算元素新位置时要用减法( elmnt.offsetLeft - pos1 )。如果你用新的位置减去旧的位置(如 pos1 = e.clientX - pos3 ),则计算元素新位置时要用加法( elmnt.offsetLeft + pos1 )。
closeDragElement 则是简单的将 document.onmouseup 和 document.onmousemove 清空(null)。这样,元素对滑鼠的移动和松开事件便不再有反应。
至此,可拖拉效果也就实现了。
W3Schools视频系列完结
W3Schools视频系列也同样结束了,希望这个系列对你来讲是有帮助的。
W3Schools系列的代码都在GitHub上: W3Schools GitHub
W3Schools教学系列
W3Schools 是知名的网页设计/前端开发教学网站,不仅提供HTML、CSS、JavaScript等的详尽教学,还可以把它当作说明文件(Documents)。有经验的前端或多或少已经接触过这个网站,因为它经常出现在搜索结果的前几项。其中,它的 How To 部分更是包含了大量非常实用的例子,例如,如何制作SlideShow(图片轮播)、Lightbox、Parallax(视差效果)等等。因此我想做一系列的影片专门介绍这些How To。
W3Schools系列全部视频:
以上所述就是小编给大家介绍的《可拖拉效果如何实现 - W3Schools视频08完结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 手敲代码太繁琐?“拖拉拽”式python编程惊艳到我了!
- Flutter 布局控件完结篇
- matlab—回归与内插(完结)
- Laravel核心解读--完结篇
- 微信小程序教程04:API(完结)
- ES6 —项目综合实战(完结篇)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。