模拟可移动分隔线:需要禁用默认拖动
Emulating a movable divider: Need to disable default dragging
我使用html5 + css3 + javascript制作gui应用程序。我试图模仿一个结构,其中一个寡妇被分成两个部分,中间有一个可移动的窗格。当用户拖动窗格时,窗格将跟随鼠标光标,改变两侧两个部分的大小。到目前为止,我得到了以下代码:
<html>
<head>
<style>
.container {
display : inline-block;
height : 500px;
}
.pane {
display : inline-block;
width : 10px;
height : 100%;
vertical-align : top;
color : #806000;
background-color : #b0d0c0;
}
.resbox {
display : inline-block;
width : 200px;
height : 100%;
background-color : #707070;
}
</style>
<script async="true">
function dragStart(e, left, right){
mousedown = true;
x = e.clientX
dragOffsetLeft = document.getElementById(left).offsetWidth - x;
dragOffsetRight = document.getElementById(right).offsetWidth + x;
};
function dragRelease(){
mousedown = false;
};
function drag(e, left, right){
if(!mousedown){return}
x = e.clientX
tmpLeft = dragOffsetLeft + x
tmpRight = dragOffsetRight - x
if(tmpLeft < 30 || tmpRight < 30){return}
document.getElementById(left).style.width = tmpLeft + 'px';
document.getElementById(right).style.width = tmpRight + 'px';
};
</script>
</head>
<body>
<span class="container">
<span id="left" class="resbox">Left</span>
<span class="pane" onmousedown="dragStart(event, 'left', 'right');" onmousemove="drag(event, 'left', 'right');" onmouseout="dragRelease();" onmouseup="dragRelease();"></span>
<span id="right" class="resbox">Right</span>
</span>
</body>
</html>
它有时有效,但其他时候(特别是在我完成了窗格的拖动之后),中间的窗格会像图片一样拖出位置,并且预期的功能被阻塞。我在<script>...</script>
中添加了以下内容,但是没有帮助。
window.onload = function(){
document.getElementsByClassName('pane')[0].draggable = false;
};
我能有关于如何禁用默认拖动的建议吗?我使用firefox 7.0.1和chrome 15.0.874.106。这段代码还有什么其他的改进点可以让动作更加稳定和流畅吗?
首先,在拖动分隔符时停止突出显示文本:
onmousedown="dragStart(event, 'left', 'right'); return false;"
// Returning false stops the default dragging
当光标移动太快时,这仍然不起作用。这是因为分隔符太细,光标可以通过快速移动退出。
我在这里做了一个快速的解决方案:http://jsfiddle.net/np56t/1/
我建议尝试使用jQuery UI Draggable来做正确的
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 删除对HTML元素的拖动
- jQuery UI可排序-多连接列表拖动
- 禁用SVG拖动
- 旋转后拖动对象
- JQuery UI可拖动潜水与滚动棒到鼠标
- jsPlumb-拖动克隆而不进行复制
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使元素在可拖动元素内可单击
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- 在d3中拖动一条线
- 使元素在iframe中可拖动
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- 如何使所有绘制的(矩形、圆形、直线、多边形)都可拖动?纯JS
- 使用dragstartpreventdefault来禁用浏览器默认的图像拖动,但它也禁用了我的拖动事件
- 模拟可移动分隔线:需要禁用默认拖动
- 我如何使用GMaps API来显示默认为用户的HTML5地理位置的可拖动引脚?
- HTML-为什么链接和图像在默认情况下是可拖动的
- 如何使用jquery检测浏览器的默认拖动事件
- 如何触发交互.js事件/将所有可拖动对象恢复到默认位置(x : 0 , y : 0 )