我对jQuery库中的鼠标事件有疑问。 我有一个简单的javascript函数如下:
$(function() {
var xpos;
var ypos;
$("#pic1").mousedown(function() {
$("#pic1").mousemove(function(e) {
xpos = e.pageX;
ypos = e.pageY;
$("#pic1").css({'left': xpos, 'top': ypos});
});
});
});
它使你可以点击一个图像,它跟随鼠标。我试图通过使用mouseup函数使其停止跟随,但似乎它无法破坏“重绘”方法,它更新了css坐标。
HTML:
<img id="pic1" src="img/test.jpg" alt="">
CSS:
#pic1 {
position: absolute;
}
有没有更简单的方法来实现这一目标?
答案 0 :(得分:0)
你设置这个鼠标移动触发器的方式是在鼠标按下时绑定的。要删除元素,您需要取消绑定触发器(http://api.jquery.com/unbind/)或在移动处理程序中设置条件,以便仅在满足条件时更新元素的位置,然后确保鼠标按下/向上打开/关闭该条件。前者似乎更简单,但更简单的可能是使用jquery ui:http://jqueryui.com/draggable/
祝你好运答案 1 :(得分:0)
如果您不想使用jquery ui draggable,您的结构将如下所示:
$(function() {
$("#pic1").on('mousedown', function() {
$(this).on('mousemove', function(e) {
$(this).css({'left': e.pageX, 'top': e.pageY});
});
}).on('mouseup', function() {
$(this).off('mousemove');
});
});
答案 2 :(得分:0)
这是使用jQuery .on()
和.off()
的一点重构:
$(function() {
var xpos,
ypos,
$pic = $('#pic1');
$pic.on('mousedown', function() {
$pic.on('mousemove', function(e) {
xpos = e.pageX;
ypos = e.pageY;
$pic.css({'left': xpos, 'top': ypos});
});
});
$pic.on('mouseup',function(){
$pic.off('mousemove');
});
});
演示:http://jsfiddle.net/tYpKL/1/
.off()
是一个非常有用的方法,允许您取消绑定使用.on()
设置的方法。
我认为您应该考虑使用库来处理此功能,因为从演示中可以看出,您甚至没有接近稳固的用户体验。 :)
祝你好运!答案 3 :(得分:0)
有一个更简单的解决方案。
HTML:
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"/>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<style>
#pic1 { width: 100px; height: 100px; padding: 1px; }
</style>
<script>
$(function() {
$("#pic1").draggable();
});
</script>
</head>
<body>
<div id="pic1" class="ui-widget-content">
<img src="pic1.jpg" alt="Image 1">
</div>
</body>
</html>
这是一个链接(http://api.jqueryui.com/draggable/),它将解释用于可拖动功能的API的所有细节。