jQuery on window scroll animate background image position

前端 未结 6 2252
小鲜肉
小鲜肉 2020-12-12 18:26

I am trying to achieve a scrolling effect using jQuery. I have a background div set to 100% browser window size with overflow hidden. This has a large background image that

相关标签:
6条回答
  • 2020-12-12 18:53

    If you don't want to be hassled with the extra background div, here's my code I wrapped up from several examples:

    $(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");
    }
    

    The Math.max is required for cross-browser issues. Also replace '1920' with the width of your background image

    body{
        background-image:url(images/background.jpg);
        background-position:center top;
        background-repeat:no-repeat;
        background-attachment:fixed;
    }
    
    0 讨论(0)
  • 2020-12-12 19:03

    Here you go. Background is set to 10% scroll. You can change the background scroll rate by changing the 10 in the code.

    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');
    });
    

    Check working example at http://jsfiddle.net/Vbtts/
    Click this link for the full screen example: http://jsfiddle.net/Vbtts/embedded/result/


    0 讨论(0)
  • 2020-12-12 19:12

    This worked for me:

    In js:

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

    In 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;
    

    Where #main is the div whose background image I wanted to move. No need to have height: 100% for html, body.

    This is a variation for multiple background images.

    0 讨论(0)
  • 2020-12-12 19:13

    Look here to see an example of how far the user has scrolled on the page. See the $(this).scrollTop()?

    Rather than referencing $(this), try using the background div. Then use a .scroll function to determine how much to move the background.

    Your code should look something sort of like this:

    $("html").scroll(function{
      var move["bottom"] = $("bg_div").scrollTop();
      $("bg_div").animate({bottom: move}, 500);
    });
    
    0 讨论(0)
  • 2020-12-12 19:15

    I don't think you can use += or -= when you have two parts in the CSS. There is something you can do, it is a bit tricky but it works:

    $(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);
        }
    });
    

    This code gets only the second number from the background-position of the div (the top position), converts it to int, and increases it by 10. Then it just animates the div to the new position.

    0 讨论(0)
  • 2020-12-12 19:19

    This might do it:

    $(window).scroll(function(){
        $('#div').css("background-position",parseInt($(this).scrollTop()*0.05));
    })
    
    0 讨论(0)
提交回复
热议问题