在向下滚动页面时多次更改背景颜色
Change background color multiple times while scrolling down the page
我正在这个项目上工作,我正在创建一个使用视差滚动的网站。应该是一个很长的单呼机。当你向下滚动页面时,当你到达页面的每个新部分时,背景颜色应该会改变。
我花了几天时间在网上搜索,也在这里的stackoverflow,但我没有发现任何工作在我想要的方式。
我在堆栈中找到了这个脚本:
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(',') +')');
});
});
http://jsfiddle.net/dtZDZ/12/这是小提琴
这个脚本完全是我想要的,除了我只改变颜色一次来回。我需要它改变背景颜色像4-5次,而你向下滚动的页面。此外,我希望它有一个平滑的过渡时,改变颜色,如在小提琴:)
我希望有人可以帮助我,或者只是指出我在正确的方向。
提前感谢
你可以使用css:
渐变背景body {
background-color: linear-gradient(red, blue, green, blue, red)
}
向下滚动,你的背景将改变。这个方法有点"不可靠",但它会在到达背景的末尾时循环。
给你:
您可以在您的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(',') +')');
});
此处演示:http://jsbin.com/ulohif/1/edit
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用jquery更改html中的背景颜色
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- JS幻灯片与CSS背景颜色变化
- DT数据表背景颜色为黑色,但仍有悬停和选择颜色
- Javascript通过列表项的函数和css来更改背景颜色
- Javascript没有从数组中选择背景颜色
- 使用圆中的数组更改背景颜色项目
- 如何用jquery动画改变背景颜色,就像一个过渡
- 使用jquery交换并保存背景颜色
- j查询如何设置/取消设置下拉菜单的背景颜色
- 使用angularjs根据时间更改背景颜色
- 设置Dojo量表的背景颜色
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- 使用javascript更改任意文本的背景颜色
- 在用Javascript更改背景颜色后:hover don'不要改变颜色
- 图像内部的透明背景颜色不受影响
- jQuery mobile-动态更改ui页面背景颜色
- 切换按钮的背景颜色
- JavaScript更改类的背景颜色