为什么我的Javascript / jQuery可以在Chrome和Safari中运行,但不能在Firefox,IE9或Opera中运行?

时间:2011-10-07 08:46:09

标签: javascript jquery webkit cross-browser syntax-error

http://jsfiddle.net/nicktheandroid/tfZns/4/

你抓住页面并向上或向下扔,有点像android或iphone。它适用于Chrome和Safari(webkit),但它在firefox,ie9或Opera中不起作用。

我得到了一些这个脚本的帮助,我真的不确定它不适合在那些浏览器中工作。我认为Javascript / Jquery中的某些东西在几乎每个浏览器中都会起作用,我猜错了。

在Webkit浏览器中,您可以在页面上进行浏览,然后向上或向下轻拂并释放鼠标按钮,页面将滚动/滑动,就像您在触摸屏手机上轻弹或拖动手指一样,它会向上滚动浏览器页面或者。在Firefox,IE9和Opera中,尝试mousedown,然后轻弹/拖动只会导致页面上的数字突出显示,页面不会像应该的那样滚动。

使用Javascript:

var gesturesX = 0;
var gesturesY = 0;

var startPosition = 0;
var velocity = 0;
var isMouseDown = false;
var startScrollTop = 0;

var timer;

function GetVelocity() {
    velocity = startPosition - gesturesY;
}

$(document).mousemove(function(e) {
    gesturesX = parseInt(e.pageX, 10);
    gesturesY = parseInt(e.pageY, 10);
    $("#mouse").html(gesturesY);
    if (isMouseDown) {
        var scrollToPosition = startScrollTop + (startPosition - gesturesY);
        $("body").scrollTop(scrollToPosition);
        return false;
    }
});

$(document).mousedown(function() {
    if ($("body").is(':animated')) {
        $("body").stop(true, false).trigger('mouseup');
    }
    startPosition = gesturesY;
    startScrollTop = $("body").scrollTop();
    isMouseDown = true;
    timer = window.setTimeout(GetVelocity, 50);
    $(document).everyTime(50, function(i) {
        velocity = startPosition - gesturesY;
    });
});

$(document).mouseup(function() {
    isMouseDown = false;
    if (velocity !== 0) {
        $Body = $("body");
        var distance = velocity * 10;
        var scrollToPosition = $Body.scrollTop() + distance;
        $Body.eq(0).stop().animate({
            scrollTop: scrollToPosition
        }, 1000);
        velocity = 0;
    }
    return false;
});

// create a ton of numbers to make the page long - below
$("#test p").each(function(index) {
    $(this).prepend('<span class="commentnumber">' + index + 1 + '</span>');
});

2 个答案:

答案 0 :(得分:2)

将“body”更改为“html”并且它将起作用。在最新的Firefox和Opera上测试,你必须检查它是否适用于旧版本。

$("html").scrollTop(scrollToPosition);

您还可以考虑disabling text selection,因为滚动页面时看起来有点滑稽。

答案 1 :(得分:2)

我认为你应该使用选择器$('html, body')