首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景位置-y的起伏JavaScript动画

问背景位置-y的起伏JavaScript动画
EN

Stack Overflow用户
提问于 2016-10-12 02:12:19
回答 4查看 1.4K关注 0票数 1

所以我的实际问题是,我想要一个固定的背景图像效果,同时保持背景图像足够宽来填充一个容器。不幸的是,使用background-attachment:fixed;的CSS方式只会相对于视口定位图像。这就造成了屏幕大小与背景图像大不相同的问题,在这种情况下,屏幕大小会导致背景图像(即人的照片)不需要的剪裁。

我目前得出的解决方案是使用background-size: contain来防止在所有屏幕大小上裁剪图像,同时通过在滚动体上动画background-position-y来模拟background-attachment: fixed和JavaScript。问题是,如果我单击一个导致页面下端的scrollTop动画的按钮,图像的background-position-y设置就会不稳定。

你知道如何防止动画中的这种急躁吗?

​

代码语言:javascript
复制
// Banner scroll function
    var scrollTop = $(window).scrollTop();
    var banner = $('.hero-banner').css('background-position-y',scrollTop+'px');
    var debounced_fixBG = function(){
        var newScrollTop = $(window).scrollTop();
        banner.css('background-position-y',newScrollTop+'px');
        scrollTop = newScrollTop;
    };
    $(window).scroll(debounced_fixBG);
    
     $('.scroll-down').on('click',function(){
        $('html,body').animate({
            easing: 'swing',
            scrollTop: $('#anchor').offset().top
        },2000);
    });
代码语言:javascript
复制
.hero-banner {
  background-image: url('http://londonprogressivejournal.com/site_images/741.jpg');
  height: 383px;
  background-repeat: no-repeat;
  background-attachment: contain;
  background-position-y: top;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<button class="scroll-down">
Scroll Down
</button>
<div class="hero-banner">
&nbsp;
</div>
<br>
<br>
<br>
<br>
<br>
<a id="anchor">Anchor</a>

​

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-12 02:50:56

在评论中张贴答复:

您可以同时使用background-attachment:fixed;和background-size:contain;,并通过用background-position-y:[height of top element];抵消图像来避免顶部剪切。

票数 1
EN

Stack Overflow用户

发布于 2016-10-12 02:18:55

您可以在transition元素中将.hero-banner属性设置为background-position-y .5s ease-in-out

​

代码语言:javascript
复制
// Banner scroll function
    var scrollTop = $(window).scrollTop();
    var banner = $('.hero-banner').css('background-position-y',scrollTop+'px');
    var debounced_fixBG = function(){
        var newScrollTop = $(window).scrollTop();
        banner.css('background-position-y',newScrollTop+'px');
        scrollTop = newScrollTop;
    };
    $(window).scroll(debounced_fixBG);
    
     $('.scroll-down').on('click',function(){
        $('html,body').animate({
            easing: 'swing',
            scrollTop: $('#anchor').offset().top
        },2000);
    });
代码语言:javascript
复制
.hero-banner {
  background-image: url('http://londonprogressivejournal.com/site_images/741.jpg');
  height: 383px;
  background-repeat: no-repeat;
  background-attachment: contain;
  background-position-y: top;
  transition: background-position-y .5s ease-in-out;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<button class="scroll-down">
Scroll Down
</button>
<div class="hero-banner">
&nbsp;
</div>
<br>
<br>
<br>
<br>
<br>
<a id="anchor">Anchor</a>

​

票数 0
EN

Stack Overflow用户

发布于 2016-10-12 02:40:09

jQuery动画往往是不稳定的,因为它是非常高的水平;有很多东西,你的计算机需要计算动画。如果我是你,我会使用原生CSS解决方案。这里是一些很好的教程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39989464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档