两种颜色之间的功能

时间:2015-12-06 17:29:25

标签: javascript loops colors

我希望在两种颜色之间有一个简单的div渐渐消失,即蓝色到红色,红色到蓝色,蓝色到红色等等。

理想情况下,我有一个这样的功能,它只需要两种颜色和它们之间的淡入淡出所需的时间。

toggle_color = function(color1, color2, time) { ... }

我已经尝试过使用setInterval和setTimeout在它们之间翻转,但它并没有顺利(即淡化)或循环。不知道该怎么做。也不确定使用延迟是正确的道路。似乎只是在单个时间值之间不断处于淡入淡出的状态可能更简单,但同样不确定如何。

function toggle_color(color1, color2, cycle_time, wait_time) {

setInterval(function first_color() {
    document.body.style.backgroundColor = color1;
    setTimeout(change_color, wait_time);
}, cycle_time);

function change_color() {
    document.body.style.backgroundColor = color2;
}

2 个答案:

答案 0 :(得分:1)

我不知道如何在不使用CSS过渡的情况下做到这一点,但我相信你仍然可以得到你想要的东西。您可以使用JS动态修改背景色动画的过渡时间。

// CSS
body {
   -webkit-transition:background-color 1s ease;
   -moz-transition:background-color 1s ease;
   -o-transition:background-color 1s ease;
   transition:background-color .1s ease;
}

// JS

var id = toggle_color('red', 'blue', 5000);

function toggle_color(color1, color2, time) {
  var $selector = document.querySelector('body');

  setTransitionDurations($selector, time)
  $selector.style.backgroundColor = $selector.style.backgroundColor === color1 ? color2 : color1; 
  var intervalId = setInterval(function() {
    $selector.style.backgroundColor = $selector.style.backgroundColor === color1 ? color2 : color1; 
  }, time);
  return intervalId;
}

function getStringFromMs(ms) {
  // convert ms to string
  // i.e. 1000 => '1ms'
  return ms + 'ms';
}

function setTransitionDurations($selector, ms) {
  var transitionSeconds = getStringFromMs(ms);
  // you need to set the transition for 
  // each browser for max compatibility
  var prefixes = ['-webkit', '-o', '-moz'];
  prefixes.forEach(function(prefix) {
    $selector.style.setProperty(prefix + '-transition-duration', transitionSeconds);
  })
  $selector.style.transitionDuration = transitionSeconds;
}

看看这个jsfiddle乱七八糟:https://jsfiddle.net/dwLL9yy4/8/。注意几件事。如果要动态更改转换,则需要确保更新每个浏览器的转换。注意,仅在IE10及更高版本中支持转换。此外,转换期望时间格式为“1s”或“1000ms”。有关转换的更多详细信息,请查看https://developer.mozilla.org/en-US/docs/Web/CSS/transition

答案 1 :(得分:1)

只有几行CSS:

body{
  animation: bodybg 2s 0s linear infinite alternate;
}

@keyframes bodybg{
  from   {background:red;}
  to     {background:blue;}
}