Javascript 向下滚动页面时多次更改背景颜色
我正在做这个项目,我正在创建一个使用视差滚动的网站。应该是一个长长的一页传呼机。当你向下滚动页面时,当你到达页面的每个新部分时,背景颜色应该会改变 我花了好几天时间在网上搜索,也在这里搜索stackoverflow,但我没有找到任何我想要的方式 我在堆栈中找到了以下脚本:Javascript 向下滚动页面时多次更改背景颜色,javascript,jquery,scroll,parallax,Javascript,Jquery,Scroll,Parallax,我正在做这个项目,我正在创建一个使用视差滚动的网站。应该是一个长长的一页传呼机。当你向下滚动页面时,当你到达页面的每个新部分时,背景颜色应该会改变 我花了好几天时间在网上搜索,也在这里搜索stackoverflow,但我没有找到任何我想要的方式 我在堆栈中找到了以下脚本: var tStart = 100 // Start transition 100px from top , tEnd = 500 // End at 500px , cStart = [250,
var tStart = 100 // Start transition 100px from top
, tEnd = 500 // End at 500px
, cStart = [250, 195, 56] // Gold
, cEnd = [179, 217, 112] // Lime
, cDiff = [cEnd[0] - cStart[0], cEnd[1] - cStart[1], cEnd[1] - cStart[0]];
$(document).ready(function(){
$(document).scroll(function() {
var p = ($(this).scrollTop() - tStart) / (tEnd - tStart); // % of transition
p = Math.min(1, Math.max(0, p)); // Clamp to [0, 1]
var cBg = [Math.round(cStart[0] + cDiff[0] * p), Math.round(cStart[1] + cDiff[1] * p), Math.round(cStart[2] + cDiff[2] * p)];
$("body").css('background-color', 'rgb(' + cBg.join(',') +')');
});
});
这是小提琴
这个脚本做的正是我想要的,只是我只来回改变一次颜色。我需要它改变背景颜色,如4-5倍,而你向下滚动页面。另外,我希望它在改变颜色时有一个平滑的过渡,如在小提琴中:)
我希望有人能帮我解决这个问题,或者给我指出正确的方向
提前谢谢你给你:
您可以在colors
变量中指定任意数量的颜色
var colors = [
[250, 195, 56], // Gold
[250, 0, 0], // Red
[0, 250, 0], // Green
[0, 0, 250], // Blue
[179, 217, 112] // Lime
];
var height = $('body').height() - window.innerHeight;
$(document).scroll(function() {
var steps = Math.floor(height / colors.length);
var position = $(this).scrollTop();
var currentStep = Math.floor(position / steps);
if ( currentStep === colors.length ) currentStep = colors.length - 1;
var rgb = $("body").css('background-color').replace('rgb(','').replace(')','').replace(/\s/g, '').split(',');
var previousColor = colors[currentStep] || colors[0];
var nextColor = colors[currentStep+1] || colors[colors.length-1];
var percentFromThisStep = ( position - ( currentStep * steps ) ) / steps;
if ( percentFromThisStep > 1 ) percentFromThisStep = 1;
var newRgb = [
Math.floor(previousColor[0] + ( ( nextColor[0] - previousColor[0] ) * percentFromThisStep )),
Math.floor(previousColor[1] + ( ( nextColor[1] - previousColor[1] ) * percentFromThisStep )),
Math.floor(previousColor[2] + ( ( nextColor[2] - previousColor[2] ) * percentFromThisStep ))
];
$("body").css('background-color', 'rgb('+ newRgb.join(',') +')');
});
此处演示:您可以使用css使用渐变背景:
body {
background-color: linear-gradient(red, blue, green, blue, red)
}
向下滚动,您的背景将更改。这个方法有点“欺骗”,但它的工作原理是当它到达后台时会循环。为什么要用javascript/jQuery这样做?它可以通过css来完成html@Sarfaraz,CSS不支持滚动,你需要JS@萨法拉兹我认为这是最好的解决方案,我还希望在颜色之间切换时有一种动画效果。但是如果我可以用html css来完成,那就太好了。你能告诉我怎么做吗?@drinchev你有JS的解决方案吗:)?。谢谢你的脚本,但我需要能够选择不同的颜色。就像Vucko之前做的那样。比如从顶部开始的1000px会变成红色,从顶部开始的2000px会变成绿色,依此类推。你能在你的脚本中加入这个吗:)?好吧,从现在起你可以自己解决它。玩一下这个代码。该死;)但是好的:)我对脚本非常熟悉,但是我会尝试知道这有很多问题,但是你能帮我解决吗?老实说,我真的没有任何线索。我将非常感激:)