第一次使用CSDN自带markdown编辑器,界面不对,请谅解!
如何在HTML页面上自由移动DIV组件?
原理:所谓的div移动,是指div不停的变化和刷新位置坐标。
解决步骤:
- 鼠标点击,获取需要移动的DIV DOM对象。
- 鼠标移动,计算移动值后调整DIV的位置。
代码示例:
$("#"+this.props.softwareID).mousemove(function (event) {
if (clicked == "none") {
return;
}
mausx = event.pageX;
mausy = event.pageY;
winx = $("#"+clicked).offset().left;
winy = $("#"+clicked).offset().top;
difx = mausx - old_mausx;
dify = mausy - old_mausy;
old_mausx = mausx;
old_mausy = mausy;
var newx = winx + difx - $("#"+clicked).css("marginLeft").replace('px', '');
var newy = winy + dify - $("#"+clicked).css("marginTop").replace('px', '');
if (clicked != "none") {
$("#"+clicked).css({ top: newy, left: newx });
}
});
$("#"+this.props.softwareID).mousedown(function (event) {
console.log("mousedown:" + event.target.parentNode.parentNode.id);
clicked = event.target.parentNode.parentNode.id;
old_mausx = event.pageX;
old_mausy = event.pageY;
setMaxZIndex(clicked);
});
$("#"+this.props.softwareID).mouseup(function (event) {
console.log("mouseup:" + event.target.id);
clicked = "none";
});
当存在多个DIV时,注意重叠问题,通过修改zIndex进行重叠处理,保持移动对象始终保持最上层显示。
function setMaxZIndex(o) {
console.log("setMaxZIndex: " + $("#"+o).css('zIndex'));
var zMax = 0;
$(".window").each(function(index){
zMax = this.style.zIndex > zMax ? this.style.zIndex : zMax;
});
if ($("#"+o).css('zIndex') < zMax) {
zMax++;
console.log("zMax: " + zMax);
$("#"+o).css({zIndex: zMax });
}
}