所以我遇到的实际问题是我想要一个固定的背景图像效果,同时保持背景图像足够宽以填充容器。不幸的是,使用background-attachment:fixed;
的CSS方式只会相对于视口定位图像。这会在屏幕尺寸上产生一个问题,因为屏幕尺寸与背景图像的纵横比差异很大,导致不必要的背景图像剪切(这是一个人的照片)。
我目前使用的解决方案是使用background-size: contain
来防止在所有屏幕尺寸上裁剪图像,同时通过动画background-attachment: fixed
滚动来模拟JavaScript background-position-y
。问题是如果我然后单击导致页面scrollTop
动画的按钮,则图像的background-position-y
设置不稳定。
知道如何防止动画中的这种混蛋?
// 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);
});

.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;
}

<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">
</div>
<br>
<br>
<br>
<br>
<br>
<a id="anchor">Anchor</a>
&#13;
答案 0 :(得分:1)
发表评论的回答:
您可以同时使用background-attachment:fixed;
和background-size:contain;
,并通过background-position-y:[height of top element];
偏移图片来避免上切。
答案 1 :(得分:0)
您可以在transition
元素
background-position-y .5s ease-in-out
属性设置为.hero-banner
// 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);
});
&#13;
.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;
}
&#13;
<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">
</div>
<br>
<br>
<br>
<br>
<br>
<a id="anchor">Anchor</a>
&#13;
答案 2 :(得分:0)
jQuery动画往往不稳定,因为它非常高级;您的计算机需要计算很多东西来制作动画。如果我是你,我会使用原生的CSS解决方案。 Here是一些很好的教程。
答案 3 :(得分:0)
除上述答案外,尝试使用固定位置而不是在滚动上移动元素。它会更顺畅。