Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery:computing';左边距';或';左';相对于$(window).scrollLeft()在Firefox中是锯齿状的;使用.animate()或.css()_Javascript_Jquery_Css - Fatal编程技术网

Javascript jquery:computing';左边距';或';左';相对于$(window).scrollLeft()在Firefox中是锯齿状的;使用.animate()或.css()

Javascript jquery:computing';左边距';或';左';相对于$(window).scrollLeft()在Firefox中是锯齿状的;使用.animate()或.css(),javascript,jquery,css,Javascript,Jquery,Css,我有一个水平滚动的网站,我有一个块,当用户向右滚动时,我想一直保持在框架中。它在webkit浏览器中看起来非常平滑,但在Firefox中却异常锯齿状,我真的不在乎IEs function fixMyId(){ $('#myId').css({'margin-left': 150 + $(window).scrollLeft()}); } function fixMyIdAlt(){ $('#myId').stop().animate({'margin-left': 150 + $(

我有一个水平滚动的网站,我有一个块,当用户向右滚动时,我想一直保持在框架中。它在webkit浏览器中看起来非常平滑,但在Firefox中却异常锯齿状,我真的不在乎IEs

function fixMyId(){
   $('#myId').css({'margin-left': 150 + $(window).scrollLeft()});
}

function fixMyIdAlt(){
   $('#myId').stop().animate({'margin-left': 150 + $(window).scrollLeft()}, 300);
}
然后在窗口滚动时触发

平均滚动的最佳方法是什么,以便每滚动这么多秒或像素触发一次函数,或者在停止滚动时将块动画设置到位?我试着玩delay(),但那没用。这个看起来很愚蠢(而且我不知道这种嘎吱嘎吱声的开销是多少):

那我该怎么办?setTimeout和setInterval可能是必需的,但它们总是让我头疼

编辑:这里是一个正在运行的jsfiddle:


#f0f正方形是#myId。

我也尝试过这样做,问题是滚动事件没有按您希望的那样触发。一个很好的解决方法是将计算函数订阅到mousemove事件,因此它会触发很多事件。但另一方面,我想出了另一个解决办法

为什么不扭转局面问问自己: 让我们将其设置为一个
位置:固定的
对象,并计算调整大小时发生的情况。因为您实际上正在尝试创建一个位置-x:fixed;和位置-y:绝对

实际上,我做了以下相反的事情。一个必须精确地位于X文档中间的块,但是在y中它是固定的。
$(document).ready(function ()
{
    replaceFixed();

    $(window).resize(replaceFixed);
    $('#content').ajaxSuccess(replaceFixed);
    $(window).scroll(replaceFixed);

    function replaceFixed()
    {
        var jEl = $('#centeredFixedContainer');

        var winW = $(window).width();
        var docW = $(document).width();
        var scrL = $(window).scrollLeft();
        var divW = jEl.width();

        var result = 0;

        // window bigger than the element
        if(winW > divW)
        {
            result = -scrL + ((docW-winW)/2);
        }
        else
        {
            result = $('#mainContainer').offset().left - scrL;
        }


        jEl.css('left',result);
    }
});

复制此代码不会为您提供解决方案,但会表明您看待问题的另一种方式。

+1因为您不关心IE。您能提供一个或多个示例吗?给您:嘿,这很有效,谢谢!以下是更新后的JSFIDLE:值得注意的是,这可能会在iPad上表现得很奇怪,因为position:fixed BERKED。另外,对于我的应用程序,我并不担心它会粘在窗口的底部,而不是当文档比窗口短时粘在文档的底部。这也使得数学变得更短。再次感谢!
$(document).ready(function ()
{
    replaceFixed();

    $(window).resize(replaceFixed);
    $('#content').ajaxSuccess(replaceFixed);
    $(window).scroll(replaceFixed);

    function replaceFixed()
    {
        var jEl = $('#centeredFixedContainer');

        var winW = $(window).width();
        var docW = $(document).width();
        var scrL = $(window).scrollLeft();
        var divW = jEl.width();

        var result = 0;

        // window bigger than the element
        if(winW > divW)
        {
            result = -scrL + ((docW-winW)/2);
        }
        else
        {
            result = $('#mainContainer').offset().left - scrL;
        }


        jEl.css('left',result);
    }
});