- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个名为 BitDay 的开源元素,该元素是我不久前在 Reddit 上启动的。
我有 12 个元素作为 CSS 类,每个元素都有自己的背景图片。
现在,我使用的 jQuery 获取时间,并根据一天中的时间对类名应用扩展,因此背景每 2 小时就会更改一次
$(function() {
$('.clock').hide();
$('.music').hide();
//Cache these for performance
$h1 = $('h1');
$h3 = $('h3');
$body = $('body');
//Sets the font size based on scale
var setScale = function(elem, scaleFactor) {
var scaleSource = $body.width(),
maxScale = 500,
minScale = 100; //Tweak these values to taste
var fontSize = scaleSource * scaleFactor; //Multiply the width of the body by the scaling factor:
if (fontSize > maxScale) fontSize = maxScale;
if (fontSize < minScale) fontSize = minScale;
elem.css('font-size', fontSize + '%');
}
//Resize fonts
setScale($h1, .2);
setScale($h3, .10);
//Resize font based on windows size
$(window).resize(function() {
setScale($h1, .2);
setScale($h3, .10);
});
//Check visited cookie
var visited = $.cookie("visited")
if (visited == null) {
//Fade our title page into the real wallpaper.
setTimeout(function() {
//Set the background
var d = new Date();
var hour = d.getHours();
var cssClass = getPicture(hour);
//Made our waiting div the active div
$('.bg-tobe').removeClass('bg-tobe').addClass('bg-' + cssClass);
//Fade out the active and put it in a waiting state
$('.bg-splash').fadeOut(function() {
$('.bg-splash').removeClass('bg-splash').addClass('bg-tobe');
});
//Fade in the new bg and clock. Fade out the title
$('.bg-' + cssClass).fadeIn();
$('.title').fadeOut();
updateClock();
$('.clock').fadeIn();
$('.music').fadeIn();
}, 0);
} else {
//Set the background
var d = new Date();
var hour = d.getHours();
var cssClass = getPicture(hour);
//Made our waiting div the active div
$('.bg-tobe').removeClass('bg-tobe').addClass('bg-' + cssClass);
$('.bg-splash').removeClass('bg-splash').addClass('bg-tobe');
//Fade in bg and fade out title
$('.bg-' + cssClass).fadeIn('1000');
$('.title').fadeOut('slow');
//Set up clock and music
updateClock();
$('.clock').fadeIn('slow');
$('.music').fadeIn('slow');
}
// set cookie
$.cookie('visited', 'yes', {
expires: 30,
path: '/'
});
//Start updating the clock
setInterval('updateClock()', 1000);
});
//Determines the picture to use based on the hour
function getPicture(hour) {
if (hour >= 23 || hour <= 2)
return 11;
else if (hour >= 22)
return 10;
else if (hour >= 21)
return 9;
else if (hour >= 19)
return 8;
else if (hour >= 16)
return 7;
else if (hour >= 15)
return 6;
else if (hour >= 13)
return 5;
else if (hour >= 12)
return 4;
else if (hour >= 10)
return 3;
else if (hour >= 7)
return 2;
else if (hour >= 5)
return 1;
else
return 0;
};
function updateClock() {
var d = new Date();
var hours = d.getHours();
var mins = d.getMinutes();
var ampm = hours < 12 ? "AM" : "PM";
//Formatting
mins = ((mins < 10) ? "0" : "") + mins;
hours = (hours > 12) ? hours - 12 : hours;
hours = (hours == 0) ? 12 : hours;
hours = ((hours < 10) ? "0" : "") + hours;
var str = hours + ":" + mins + " " + ampm;
//Set the new time
var $clock = $('.clock h3');
var oldStr = $clock.text();
$clock.text(str);
//Check if the hour has changed
var oldHour = getMilitaryHour(oldStr);
if (oldStr.length == 0) return;
var currHour = d.getHours();
if (currHour != oldHour) {
//Change bgs
var cssClass = getPicture(currHour);
var oldClass = getPicture(oldHour);
if (cssClass != oldClass) {
//Make our waiting div the active div
$('.bg-tobe').removeClass('bg-tobe').addClass('bg-' + cssClass);
//Fade in the new bg
$('.bg-' + cssClass).fadeIn('5000');
//Fade out the active and put it in a waiting state
$('.bg-' + oldClass).fadeOut(function() {
$('.bg-' + oldClass).removeClass('bg-' + oldClass).addClass('bg-tobe');
});
}
}
};
//Returns the military hour from a string formatted in standard time.
function getMilitaryHour(str) {
var hour = parseInt(str.substring(0, 2));
var ampm = str.substring(str.length - 2);
if (ampm == 'PM' && hour != 12)
return hour + 12;
else if (ampm == 'AM' && hour == 12)
return 0;
else
return hour;
}
#container {
height: 100vh;
position: relative;
}
.bg {
width: 100vw;
height: 100vh;
position: absolute;
z-index: 99;
opacity: 0.7;
}
/* Change the background! */
.bg-0 {
background-image: url("http://i.imgur.com/qexylYA.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-1 {
background-image: url("http://i.imgur.com/cRvIYLJ.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-2 {
background-image: url("http://i.imgur.com/UusvZC8.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-3 {
background-image: url("http://i.imgur.com/URjIjZS.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-4 {
background-image: url("http://i.imgur.com/Fy7kANa.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-5 {
background-image: url("http://i.imgur.com/e2lvJ8q.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-6 {
background-image: url("http://i.imgur.com/JEslGSe.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-7 {
background-image: url("http://i.imgur.com/v2h0qzb.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-8 {
background-image: url("http://i.imgur.com/xyfqUsX.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-9 {
background-image: url("http://i.imgur.com/XbIlhvL.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-10 {
background-image: url("http://i.imgur.com/xDAIc6P.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
.bg-11 {
background-image: url("http://i.imgur.com/kaCxCBi.png");
width: 100%;
height: 100%;
background-size: cover;
background-repeat: no-repeat;
margin: 0;
padding: 0; }
<div id="container">
<div class="bg-splash"></div>
<div class="bg-tobe" style="display: none;"></div>
</div>
但与其查看时间并立即更改,不如让图像在 2 小时内慢慢淡入彼此。
比如说在早上 7 点,bg-1 应用了 100% 的不透明度。从这里开始,它实时淡入 bg-2。早上 8 点,bg-1 的不透明度为 50%,早上 8:30 的不透明度为 25%,依此类推。一直以来,bg-2 都会慢慢变得越来越明显。然后在上午 9 点,bg-1 的不透明度为 0%,bg-2 的不透明度为 100%,接下来的 10 张图像都是这样。它应该创建一个很好的渐变过渡效果。
但问题在于 - 由于这将成为成千上万用户的开始屏幕,我们希望它记住任何给定时间的过渡量,因此如果用户在上午 8:30 登录,它将显示bg-1 以 25% 的不透明度混合到 bg-2 中。
这个真的让我绞尽脑汁,有人能帮忙吗?
最佳答案
我决定添加一个新的答案来保留上面的答案,因为它的工作方式有点不同,下面的答案要复杂得多。
我已经实现了你的“kicker”功能请求,这样如果我们在两个背景之间(我在下面的评论中称之为“时间 block ”),那么褪色会在中途的某个地方开始。请在下面查看我的代码。
请注意:正如我在之前的回答中所述,我不得不将背景时间更改为 2 小时的精确间隔(请参阅 javascript 代码底部)。背景可能不再完美地反射(reflect)现实生活中的日落/黎明。让一些背景持续长达 4 小时而其他背景仅持续 1 小时将需要更多的编码,所以我希望你能接受这个:-)。
我已将计时器设置为 7200000 毫秒(2 小时),因此您必须检查控制台日志(以及背景图像上的 Inspect Element)以查看它是否实际工作。我添加了一个控制台日志,以向您展示它启动时的背景图像和不透明度。例如,现在,因为这里快下午 3 点了,所以它将从背景 7 开始,几乎完全淡入:
CURRENT TIME IS: 14:59. STARTING BACKGROUNDS ARE: bg-6 (opacity 0.01, fading OUT); bg-7 (opacity 0.99, fading IN).
3 分钟后,它将开始淡出 bg-7(因为我们处于一个新的时间 block 中)并开始在下一个背景中淡出,即 bg-8:
CURRENT TIME IS: 15:02. STARTING BACKGROUNDS ARE: bg-7 (opacity 0.98, fading OUT); bg-8 (opacity 0.02, fading IN).
我很高兴看到最终产品,如果您愿意将我的名字添加到致谢名单中,我将不胜感激!祝你好运!
哦,这是新的 fiddle :https://jsfiddle.net/LaurensSwart/2go9g5n5/1/
var timeBetweenBackgrounds = 7200000; // in milliseconds - change this to 7200000 for 2 hour between every image
var d = new Date();
var hour = d.getHours();
var minutes = d.getMinutes();
var bgNumber = getPicture(hour);
$(document).ready(function() {
// Determine starting background images:
if (bgNumber < 11) {
var bgNumberNext = bgNumber + 1;
}
if (bgNumber == 11) {
var bgNumberNext = 0;
}
$('#backgroundOne').addClass('bg-' + bgNumber);
$('#backgroundTwo').addClass('bg-' + bgNumberNext);
// Get time overshoot (i.e. how far (in percentage) are we in a certain time-block):
// Every block is 2 hours, so 1 hour into a block would be 50% (0.50)
// Every minute would be 1/120th of a block (minutes / 60 * 0.50)
var timeovershoot= 0;
// Add 50% to the current block if we're in the second hour of a block (see hour definition on the bottom and adjust this if necessary):
if (hour == 0 || hour == 22 || hour == 20 || hour == 18 || hour == 16 || hour == 14 || hour == 12 || hour == 10 || hour == 8 || hour == 6 || hour == 4 || hour == 2){
timeovershoot= timeovershoot + 0.5;
}
// Calculate minute overshoot and add this to the time overshoot:
minuteovershoot= (minutes/60)*0.5;
timeovershoot= timeovershoot + minuteovershoot;
// Calculate time remaining till this block ends (to determine how long to continue fading for):
percentageOfBlockDone= timeovershoot;
percentageOfBlockRemaining= 1-percentageOfBlockDone;
secondsInBlockRemaining= timeBetweenBackgrounds * percentageOfBlockRemaining;
console.log('CURRENT TIME IS: ' + hour + ':' + minutes + '. STARTING BACKGROUNDS ARE: bg-' + bgNumber + ' (opacity ' + percentageOfBlockRemaining.toFixed(2) + ', fading OUT); bg-' + bgNumberNext + ' (opacity ' + percentageOfBlockDone.toFixed(2) + ', fading IN).')
// Set opacity values adjusted to percentage of current block that has elapsed:
// We're fading div ONE out, so this will have an opacity of the percentage still remaining in this block,
// and we're fading div TWO in, so this will have an opacity of percentage done in this block.
$('#backgroundOne').css('opacity',percentageOfBlockRemaining);
$('#backgroundTwo').css('opacity',percentageOfBlockDone);
// Adjust fade timers and start fading:
$('#backgroundOne').fadeTo(secondsInBlockRemaining, 0);
$('#backgroundTwo').fadeTo(secondsInBlockRemaining, 1, function(){
// Once we're done finishing fading the time block that we started in, continue like normal:
window.setInterval(setBackground, timeBetweenBackgrounds);
});
});
var activeBackground = bgNumber;
var activeDiv = 1;
function setBackground() {
if (activeDiv == 1) {
if (activeBackground < 11) {
var nextBackground = activeBackground + 1;
}
if (activeBackground == 11) {
var nextBackground = 0;
}
console.log('Current background = ' + activeBackground + '. Next background = ' + nextBackground + '. Fading out container One. Fading in container Two.');
$('#backgroundTwo').attr('class', 'bg').addClass('bg-' + nextBackground).fadeIn(timeBetweenBackgrounds);
$('#backgroundOne').fadeOut((timeBetweenBackgrounds - 500), function() {
activeBackground = nextBackground;
activeDiv = 2;
});
}
if (activeDiv == 2) {
if (activeBackground < 11) {
var nextBackground = activeBackground + 1;
}
if (activeBackground == 11) {
var nextBackground = 0;
}
console.log('Current background = ' + activeBackground + '. Next background = ' + nextBackground + '. Fading out container Two. Fading in container One.');
$('#backgroundOne').attr('class', 'bg').addClass('bg-' + nextBackground).fadeIn(timeBetweenBackgrounds);
$('#backgroundTwo').fadeOut((timeBetweenBackgrounds - 500), function() {
activeBackground = nextBackground;
activeDiv = 1;
});
}
}
//Determines the picture to use based on the hour
function getPicture(hour) {
if (hour >= 23 || hour <= 1)
return 11;
else if (hour >= 21)
return 10;
else if (hour >= 19)
return 9;
else if (hour >= 17)
return 8;
else if (hour >= 15)
return 7;
else if (hour >= 13)
return 6;
else if (hour >= 11)
return 5;
else if (hour >= 9)
return 4;
else if (hour >= 7)
return 3;
else if (hour >= 5)
return 2;
else if (hour >= 3)
return 1;
else
return 0;
};
body {
overflow: hidden;
}
.bg {
width: 100vw;
height: 100vh;
position: absolute;
background-size: cover;
background-repeat: no-repeat;
z-index: 99;
opacity: 0.7;
margin: 0;
padding: 0;
}
.bg-0 {
background-image: url("http://i.imgur.com/qexylYA.png");
}
.bg-1 {
background-image: url("http://i.imgur.com/cRvIYLJ.png");
}
.bg-2 {
background-image: url("http://i.imgur.com/UusvZC8.png");
}
.bg-3 {
background-image: url("http://i.imgur.com/URjIjZS.png");
}
.bg-4 {
background-image: url("http://i.imgur.com/Fy7kANa.png");
}
.bg-5 {
background-image: url("http://i.imgur.com/e2lvJ8q.png");
}
.bg-6 {
background-image: url("http://i.imgur.com/JEslGSe.png");
}
.bg-7 {
background-image: url("http://i.imgur.com/v2h0qzb.png");
}
.bg-8 {
background-image: url("http://i.imgur.com/xyfqUsX.png");
}
.bg-9 {
background-image: url("http://i.imgur.com/XbIlhvL.png");
}
.bg-10 {
background-image: url("http://i.imgur.com/xDAIc6P.png");
}
.bg-11 {
background-image: url("http://i.imgur.com/kaCxCBi.png");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bg" id="backgroundOne">
</div>
<div class="bg" id="backgroundTwo">
</div>
关于jQuery fadeTo 基于一天中的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43027495/
我在 jQuery 中使用 fadeTo() 函数时遇到问题。一开始这一切都对我有用,但现在由于某些未知的原因停止了工作。在这里我向您展示网页代码。如果您能帮助我,我将不胜感激。 $(d
我有一个 div,我用两个 div(分别命名为打开和关闭)为它的位置设置动画。 我希望“打开”div 在打开动画完成时淡出并且不可见。并在关闭动画完成时淡入可见。 但是淡入有问题。时间参数被忽略,它出
我正在 WordPress 上的特色图像上使用 .fadeTo() jQuery 效果。我如何设置代码是,如果鼠标悬停在图像上,它会淡出到 0.7,当鼠标离开时,它会淡出回 1: jQuery(fun
我创建了 3 个链接,当它们悬停在淡入淡出上时,我还添加了一个单击事件,单击该事件时会添加“事件”类,然后我想在再次单击时删除该类。我读过一些帖子,似乎建议将removeClass放在addClass
我使用下面的 javascript 递归地重新加载一个目标 DIV,其 id="outPut",将参数传递给 getData.php 时执行数据查询的结果>。问题是 fadeTo 会淡化每次迭代调用返
我正在慢慢学习如何从头开始修改和编写 jQuery,并一直在尝试修改一些预先编写的代码,这只是简单地使图像不透明度:1 和同一 HTML 元素中的所有其他图像不透明度:0.2。 当我使用 fadeTo
我试图在我的工作中对一个小的 div 对象添加一个小的 .fadeTo 效果,但不确定我是否可以以及在哪里添加它。我想将此效果添加到所有的 div。我希望它 .fadeTo (500) 这是我的 js
我正在从事一个名为 BitDay 的开源元素,该元素是我不久前在 Reddit 上启动的。 我有 12 个元素作为 CSS 类,每个元素都有自己的背景图片。 现在,我使用的 jQuery 获取时间,并
我创建了一个显示图片的网站。当您将鼠标悬停在其中一张图片上时,我希望它 fadeTo 0.5 不透明度并且我希望出现文本。例如 悬停前的图片: http://i.imgur.com/2O5BQKB.p
我一直在尝试在 div 上添加一个 .fadeTo 并最终让它工作 我有这个: BRILLIANT-HUED $(window).scroll(function (
为什么所有内容在淡入以下内容之前都会向下猛拉,我该如何修复它? 使用 FireFox 3.6.3,提前致谢。 $(documen
当您将鼠标悬停在 div 上或向下时,我想要的是一种鼠标轨迹效果。但是,如果您将鼠标悬停过快几次然后停止,效果会自行重复。 我该如何解决这个问题?我想我需要某种出队的东西,比如动画选项,但对于 fad
我让这张图片在点击按钮后淡出。如何使图像恢复到原始状态? const playGame = () => { init(); // logic removed for brevity $('
我想将 fadeTo 添加到此代码段。当 this 添加类 current 时,我希望它淡入。但我不知道如何解决,也不知道我必须在哪里放置 fadeTo (); 参数。 $(this).bind("c
有没有办法在鼠标悬停时中断 fadeTo 动画?例如:在下面的代码中,当有人悬停“slider$controls”时,它们会在 1750 毫秒时逐渐变为 0.1 不透明度,但是当您将鼠标悬停在它们上方
我有这个使用 jquery 的脚本: $(document).ready(function() { $('.fotky,.video,.diskusia,.onas,.zbrane,.akci
我正在尝试停止 fadeTo() 动画。我有一 block 4 张图片,其中 3 张(未悬停的)应变暗,而悬停的图片保持不透明度 1。不幸的是,到目前为止,我的代码使每张图片(包括悬停的图片)在这张“
我不明白为什么 .quote-container 不透明度高于 #new-quote 如果它们在相同的 fadeTo() 函数括号和持续时间是相同的。 我的意思是,在 fadeTo() 动画期间,.q
我正在尝试编写一个脚本,首先将图片淡化到 80%,然后 60%,等等。一直到 1%,但是当我调用事件 (.click) 时,我得到的只是一次交易,它会达到我设定的不透明度。我怎样才能让它继续下去?提前
我想要一个等效于 fadeTo() 的颜色,而不是不透明度。 例如,从 backgroundColor = "red" 开始,如何使用 jQuery 逐渐过渡到 backgroundColor = "
我是一名优秀的程序员,十分优秀!