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

时间:2011-02-15 08:48:06

标签: jquery image background scroll jquery-animate

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

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

有人能指出我正确的方向吗?这甚至可能吗? :)非常感谢提前。

更新

我已经对@Capt Otis的建议进行了尝试,但我仍在努力解决我正在使用的代码如下:

$(window).scroll(function(){
    if($(this).scrollTop() > 200) {
        $('#div').animate({'background-postion': '+=10px 0'}, 500);
    }
});     

任何人都可以了解我做错了什么吗?

6 个答案:

答案 0 :(得分:54)

你走了。背景设置为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>

<强>的JavaScript

$('.bg').scroll(function() {
    var x = $(this).scrollTop();
    $(this).css('background-position', '0% ' + parseInt(-x / 10) + 'px');
});

查看http://jsfiddle.net/Vbtts/的工作示例 点击此链接查看全屏示例:http://jsfiddle.net/Vbtts/embedded/result/


答案 1 :(得分:5)

这对我有用:

在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,body。

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

答案 2 :(得分:5)

如果你不想被额外的背景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;
}

答案 3 :(得分:2)

这可能会这样做:

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

答案 4 :(得分:0)

查看here以查看用户在页面上滚动了多远的示例。请参阅$(this).scrollTop()

尝试使用背景div,而不是引用$(this)。然后使用.scroll函数确定移动背景的程度。

您的代码看起来应该是这样的:

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

答案 5 :(得分:0)

当你在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设置为新位置的动画。