jQuery Drag 仅适用于 Chrome

发布于 2024-11-08 03:16:12 字数 515 浏览 0 评论 0原文

我不想使用 jQuery UI,所以我尝试自己制作一个 jQuery 拖动脚本。

这基本上是我的水平拖动代码:

var down = false;

$('#itemToMove').mousedown(function(e){
    down = true;
    left = event.pageX - $(this).offset().left;
});

$(document).mouseup(function(){
    down = false;
});

$(document).mousemove(function(e){
    if(down){
        var X = event.pageX - left;
        $('#itemToMove').css({
            left: X
        });
    }
});

我在 Chrome 中工作得很好,但在其他浏览器中却不行(尝试过 KHTML、Trident 和 Gecko)。 有人能告诉我为什么吗?

I don't want to use the jQuery UI, so I tried to make a jQuery Drag Script on my own.

This is basically my code for horizontal Dragging:

var down = false;

$('#itemToMove').mousedown(function(e){
    down = true;
    left = event.pageX - $(this).offset().left;
});

$(document).mouseup(function(){
    down = false;
});

$(document).mousemove(function(e){
    if(down){
        var X = event.pageX - left;
        $('#itemToMove').css({
            left: X
        });
    }
});

I works just awesome in Chrome, but doesn't in other browsers (tried KHTML, Trident and Gecko).
Can someone tell me why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断舍离 2024-11-15 03:16:12

我非常确定,如果您在 mousedown 事件处理程序中放置一个警报(“”),它永远不会触发。这是因为当您尝试将事件处理程序绑定到对象的 mousedown 事件时,该对象(您的 div)尚不存在。尝试将整个代码块包装在

$(document).ready(function() 中
{
// 这里是你的代码
});

像这样的东西:

    var down = false;
    var left = 0;

    $(document).ready(function()
        {
        $('#itemToMove').mousedown(function(e)
            {
            down = true;
            left = e.pageX - $(this).offset().left;
            });

        $(document).mouseup(function()
            {
            down = false;
            });

        $(document).mousemove(function(e)
            {
            if(down)
                {
                var X = e.pageX - left;
                $('#itemToMove').css(
                    {
                    left: X
                    });
                }
            });
        });

希望它有帮助:]

添加:另外,请确保浏览此文档:http://api.jquery.com/ready" jquery.com/ready,特别是以下部分:

注意:请确保所有样式表都包含在脚本之前(尤其是
那些调用ready函数的)。这样做将确保在 jQuery 代码开始执行之前正确定义所有元素属性。如果不这样做,将会导致偶发性问题,尤其是在基于 WebKit 的浏览器(例如 Safari)上。

I am pretty damn sure that if you put an alert("") inside your mousedown event handler, it will never fire. That's because by the time you try to bind the event handler to the object's mousedown event, the object (your div) does not exist yet. Try wrapping your entire code block in

$(document).ready(function()
{
// Your code here
});

Something like this:

    var down = false;
    var left = 0;

    $(document).ready(function()
        {
        $('#itemToMove').mousedown(function(e)
            {
            down = true;
            left = e.pageX - $(this).offset().left;
            });

        $(document).mouseup(function()
            {
            down = false;
            });

        $(document).mousemove(function(e)
            {
            if(down)
                {
                var X = e.pageX - left;
                $('#itemToMove').css(
                    {
                    left: X
                    });
                }
            });
        });

Hope it helps :]

Added: Also, make sure you skim through this document: http://api.jquery.com/ready, especially the following part:

Note: Please make sure that all stylesheets are included before your scripts (especially
those that call the ready function). Doing so will make sure that all element properties are correctly defined before jQuery code begins executing. Failure to do this will cause sporadic problems, especially on WebKit-based browsers such as Safari.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文