【问题标题】:jQuery Draggable: Image FlickerjQuery Draggable:图像闪烁
【发布时间】:2009-08-20 19:42:02
【问题描述】:

我一直在开发一个图像平移工具,在一位好心的成员指导我使用 jQuery 的可拖动插件之后,我完成了大部分工作。现在,如果用户拖动图像(包含在大约 300 x 300 像素的 div 中),图像将首先闪烁,然后平移。这个问题似乎发生在鼠标按下事件之后,在鼠标移动事件上。图像将在鼠标移动时移动到四个角之一,移动到某些区域会导致另一个移动。我一直无法通过谷歌找到任何东西,而且我对 jQuery 还是比较陌生。

我在这里上传了代码,以防我的描述过于模糊: http://www.studentgroups.ucla.edu/csa/test/zoom.htm

非常感谢任何想法或建议!

【问题讨论】:

    标签: javascript jquery image draggable


    【解决方案1】:

    首先,您已经通过 jQuery 插件和您自己的代码使图像可拖动。您的代码正在更改divbackground-position,而jQuery 插件正在更改div 的实际位置。这势必会导致一些问题。

    此外,Draggable 的 containment 参数似乎是为小于其父容器的可拖动项目设计的,而不是像您想要做的那样大的项目。

    无论如何,这是工作代码:

    $(document).ready(function() {
        $(".draggable").draggable().bind('dragstop', function(e, ui) {
            if (ui.position.top > 0) {
                $(this).css('top', 0);
            }
            if (ui.position.left > 0) {
                $(this).css('left', 0);
            }
    
            var bottom = -($(this).height() - $(this).parent().height()),
            right  = -($(this).width() - $(this).parent().width());
    
            if (ui.position.top < bottom) {
                $(this).css('top', bottom);
            }
            if (ui.position.left < right) {
                $(this).css('left', right);
            }
        });
    });
    

    如果你不需要边缘捕捉,你可以去掉.bind()函数,直接调用.draggable()

    $(document).ready(function() {
        $(".draggable").draggable();
    });
    

    【讨论】:

    • 哇,我不敢相信我没有意识到 -_- 我昨天从头开始写这篇文章,直到有人指出我可以使用可拖动插件。我想我忘了删除我的代码,FML 非常感谢您的帮助!不过,我还有一个问题; 'ui' 指的是什么?
    • 没问题:)。 ui 有点像事件对象 (e),但它包含特定于 jQuery UI 的内容。见docs.jquery.com/UI/Draggable
    猜你喜欢
    • 2012-08-22
    • 2014-01-07
    • 2018-12-29
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2012-05-13
    • 2010-10-29
    相关资源
    最近更新 更多