我有此代码:
<div id="list" rows="10"></div>
<script>
$(function() {
setTime();
function setTime() {
$.ajax({
url : "../abc.php",
dataType: "text",
success : function (result) {
$("#list").html(result);
}
});
var date = new Date().getTime();
setTimeout(setTime, 3000);
$('#list').html(result);
//Here should call a function to color all the words of the div
}
});
</script>
});
我正在尝试使用setTime ()
函数每3秒给所有字母上色。
注意:我正在尝试给一个单词的每个字母涂上颜色,换句话说,每个字母都会有一个颜色
赞:
https://i.imgur.com/Tw2Q58U.png
我尝试使用此代码,但是它更改了整个div的颜色(div仅保留一种颜色):
var randomColor = Math.floor(Math.random()*16777215).toString(16);
document.getElementById('list').style.color = '#' + randomColor
答案 0 :(得分:2)
如果您只想获得鲜艳的色彩,则不会像这样使用随机性。
您需要的是将HSV转换为RGB的功能,如下所示:
function HSVtoRGB(h, s, v)
{
var r, g, b, i, f, p, q, t;
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6)
{
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
r = Math.round(r * 255).toString(16);
g = Math.round(g * 255).toString(16);
b = Math.round(b * 255).toString(16);
if (r.length < 2) r = '0' + r;
if (g.length < 2) g = '0' + g;
if (b.length < 2) b = '0' + b;
return '#' + r + g + b;
}
参数的范围是0到1。使用HSVtoRGB(Math.random(), 1, 1)
将始终为您提供鲜艳的色彩,并具有最大值和饱和度。
答案 1 :(得分:2)
您必须将文本分成children spans
并对其进行着色。
function colorElement(element) {
var randomColor = Math.floor(Math.random()*16777215).toString(16);
element.style.color = '#' + randomColor;
}
function splitElement(element) {
var text = element.innerText;
element.innerText = '';
var chars = text.split('');
for(var ch of chars) {
var charSpan = document.createElement('span');
charSpan.innerText = ch;
element.appendChild(charSpan);
}
}
function randomColor() {
var result = document.querySelectorAll('span span');
for(ele of result){
colorElement(ele);
}
}
var ele = document.getElementById('myText');
splitElement(ele);
setInterval(function() {
randomColor();
},500);
<div>
<span id="myText">Disco Text</span>
</div>
答案 2 :(得分:1)
好吧,我尝试一下,它完全按照您的要求工作。您可以在代码中使用它。
window.setInterval(function(){
changeLetterColor();
}, 3000);
function changeLetterColor(){
var string = "hello world";
var customstring ='';
for(var i =0;i<string.length;i++){
customstring += "<span font color= '#"+Math.floor(100000 + Math.random() * 900000)+"'>"+ string[i]+" </span>";
}
}
答案 3 :(得分:0)
如果结果是文本,则需要用跨号将每个字母包裹起来。 喜欢下面的代码:
<div id="list" rows="10"></div>
<script>
$(function() {
setTime();
function setTime() {
$.ajax({
url : "../abc.php",
dataType: "text",
success : function (result) {
$("#list").html(result);
$("#list")
.contents()
.filter(function(){
return this.nodeType !== 1;
})
.wrap( "<b class='colorful_text'></b>" );
$.each($(".colorful_text"), function(o, v){
var textEle = $(this).text()
console.log("textEle", textEle)
$(this).html("")
for(var n=0; n<textEle.length; n++) {
var randomColor = Math.floor(Math.random()*16777215).toString(16);
var color = '#' + randomColor
var ele = document.createElement("span")
ele.style.color = color
ele.innerText = textEle[n]
$(this).append(ele)
}
})
}
});
var date = new Date().getTime();
setTimeout(setTime, 3000);
$("#list").html();
//Here should call a function to color all the words of the div
}
});
</script>