Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
窗口滚动上的jQuery设置背景图像位置动画_Jquery_Image_Background_Scroll_Jquery Animate - Fatal编程技术网

窗口滚动上的jQuery设置背景图像位置动画

窗口滚动上的jQuery设置背景图像位置动画,jquery,image,background,scroll,jquery-animate,Jquery,Image,Background,Scroll,Jquery Animate,我正在尝试使用jQuery实现滚动效果。我有一个背景div设置为100%浏览器窗口大小,溢出隐藏。这有一个大背景图像,约为1500px 2000px 我想要的效果是,当用户向下滚动页面时,背景图像以滚动距离的百分比移动,因此,每向下滚动页面200px,图像就会向同一方向移动10px 谁能给我指出正确的方向吗?这可能吗?:)非常感谢 更新 此后,我尝试了@Capt Otis建议的变体,但我仍在挣扎,我正在使用的代码如下: $(window).scroll(function(){ if($(

我正在尝试使用jQuery实现滚动效果。我有一个背景div设置为100%浏览器窗口大小,溢出隐藏。这有一个大背景图像,约为1500px 2000px

我想要的效果是,当用户向下滚动页面时,背景图像以滚动距离的百分比移动,因此,每向下滚动页面200px,图像就会向同一方向移动10px

谁能给我指出正确的方向吗?这可能吗?:)非常感谢

更新

此后,我尝试了@Capt Otis建议的变体,但我仍在挣扎,我正在使用的代码如下:

$(window).scroll(function(){
    if($(this).scrollTop() > 200) {
        $('#div').animate({'background-postion': '+=10px 0'}, 500);
    }
});     
有人能解释一下我做错了什么吗?

看看用户在页面上滚动了多远。请参阅
$(this).scrollTop()

不要引用$(this),请尝试使用background div。然后使用.scroll函数确定要移动多少背景

您的代码应该是这样的:

$("html").scroll(function{
  var move["bottom"] = $("bg_div").scrollTop();
  $("bg_div").animate({bottom: move}, 500);
});

当CSS中有两个部分时,我认为不能使用+=或-=。 你可以做一些事情,这有点棘手,但它是有效的:

$(window).scroll(function(){
    if($(this).scrollTop() > 200) {
        var bgpos = $("#div").css("background-position");
        var bgposInt = 0;
        if(bgpos.indexOf("px")!=-1) {
            bgpos = bgpos.substr(bgpos.indexOf("px")+3);
            bgposInt = parseInt(bgpos.substr(0, bgpos.indexOf("px")));
        }
        bgposInt += 10;
        $("#div").animate({"background-position": "0 "+bgposInt+"px"}, 500);
    }
});
此代码仅获取div的背景位置(顶部位置)的第二个数字,将其转换为int,并将其增加10。然后它只是将div设置为新位置的动画。

这可能会做到:

$(window).scroll(function(){
    $('#div').css("background-position",parseInt($(this).scrollTop()*0.05));
})

给你。背景设置为10%滚动。您可以通过更改代码中的10来更改背景滚动速率

CSS

html, body{
    height:100%;
    min-height:100%;
    margin:0;
    padding:0;
}
.bg{
    width:100%;
    height:100%;
    background: #fff url(..) no-repeat fixed 0 0;
    overflow:auto;
}

<div class="bg">
   <span>..</span>
</div>
检查
单击此链接可查看全屏示例:


这对我很有用:

在js中:

$(window).scroll(function() {
    var x = $(this).scrollTop();
    $('#main').css('background-position', '100% ' + parseInt(-x / 1) + 'px' + ', 0% ' + parseInt(-x / 2) + 'px, center top');
});
在css中:

#main {
background: url(../img/img1.png) center top no-repeat, url(../img/img2.png) center top no-repeat, url(../img/img3.png);
background-repeat: no-repeat, no-repeat, repeat-x;
background-position: right top, left top, center top;
其中#main是我想移动其背景图像的div。不需要有高度:100%的html,正文


这是多个背景图像的变体。

如果您不想被额外的背景div所困扰,下面是我从几个示例中总结出来的代码:

$(window).scroll(function () {
    setBackgroundPosition();
})
$(window).resize(function() {
    setBackgroundPosition();
});
function setBackgroundPosition(){
    $("body").css('background-position', "-" + (1920 - $(window).width()) / 2 + "px " + -(Math.max(document.body.scrollTop, document.documentElement.scrollTop) / 4) + "px");
}
跨浏览器问题需要Math.max。同时将“1920”替换为背景图像的宽度

body{
    background-image:url(images/background.jpg);
    background-position:center top;
    background-repeat:no-repeat;
    background-attachment:fixed;
}

谢谢你的回复。我已经尝试过这段代码的不同版本,但恐怕无法使用。@Hussien尝试过你的建议(非常感谢!),但还不能使用。我注意到在JSFIDLE上您使用的是jQuery UI,而我还没有。这取决于哪个部分,是位置吗?@mtwallet jQuery UI与代码无关。你可以不用它。当我使用jsfiddle时,我只是习惯性地将UI和jQuery都包括在内。@Hussien在这种情况下,我不确定我做错了什么。如果您不介意快速查看的话,我已经建立了自己的JSFIDLE@mtwallet您需要有
正文,html{height:100%;min height:100%;}
而不仅仅是正文。在这里查看@mtwallet Awesome,这是一种享受!非常感谢你的帮助。50分就要来了!:)
body{
    background-image:url(images/background.jpg);
    background-position:center top;
    background-repeat:no-repeat;
    background-attachment:fixed;
}