在Javascript中将过渡应用于注入的html

hix*_*ier 5 javascript css

我和JS一起工作了大约两个星期,我正在做一个小项目.目标是在按下按钮时能够更改给定字符串中每个字符的颜色.我已经走得那么远了.

如您所见,我为每个角色添加了跨度,以便我可以单独编辑它们.我正在尝试对跨度应用过渡,这样当我单击按钮时,颜色会淡化为另一种颜色而不是瞬间变化.那可能吗?

这是codepen:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="CSS/textColorV2.css">
</head>

<body>
<p id="letter">Color</p>
<button>Click ME</button>

<script type="text/javascript" src="JS/textColorV2.js"></script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS

bodybody {
background-color: #FFE7E0;
}

span{
transition: all 4s;
}

#letter {
font-size: 9em;
position: absolute;
top: 30%;
left: 50%;
transform: translate(-50%, -50%);
color:blue;
}
Run Code Online (Sandbox Code Playgroud)

JS

var letter = document.getElementById("letter");
var text = letter.innerHTML;
var button = document.querySelector("button");

button.addEventListener("click", function () {
  var newText = "";
  for (var i = 0; i < text.length; i++) {
    newText += '<span style="color:' + randomColor() + '">' + 
    text.charAt(i) + '</span>';
    letter.innerHTML = newText;
    letter.classList.add("trans");
    };
});

function randomColor() {
  //r
  var r = Math.floor(Math.random() * 256);
  //g
  var g = Math.floor(Math.random() * 256);
  //b
  var b = Math.floor(Math.random() * 256);
  return "rgb(" + r + " ," + g + " ," + b + ")";
}
Run Code Online (Sandbox Code Playgroud)

Dac*_*nny 2

这是绝对有可能的。这里的关键思想是在脚本开始时将字符串分成跨度元素(每个字符),而不是在每次单击事件期间。

采用这种方法将简化您的实现 - 在按钮单击处理程序中您需要做的就是为每个 span 元素分配一个新的“随机颜色”,并将 CSS 过渡留给浏览器来处理:

var letter = document.getElementById("letter");
var text = letter.innerHTML;
var button = document.querySelector("button");

// Convert inner text node to span nodes for each character
// at beginning of script
var text = letter.innerText;
letter.innerText = '';
for(var i = 0; i < text.length; i++) {
  var character = text[i]; 
  letter.innerHTML += '<span style="color:' + randomColor() + '">' + character + '</span>';
}

button.addEventListener("click", function () {
  
  // For each span/character of #letter, assign a new random
  // color. This causes the browser to handle the CSS color 
  // transition for you
  for(var span of document.querySelectorAll('#letter span')) {
    span.style.color = randomColor();
  }
});

function randomColor() {

  var r = Math.floor(Math.random() * 256);
  var g = Math.floor(Math.random() * 256);
  var b = Math.floor(Math.random() * 256);
  
  return "rgb(" + r + " ," + g + " ," + b + ")";
}
Run Code Online (Sandbox Code Playgroud)
span{
transition: all 4s;
}

#letter {
font-size: 9em;
position: absolute;
top: 30%;
left: 50%;
transform: translate(-50%, -50%);
color:blue;
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="CSS/textColorV2.css">
</head>

<body>
<p id="letter">Color</p>
<button>Click ME</button>
 

</body>
</html>
Run Code Online (Sandbox Code Playgroud)