Rainbow Text-shadow
Textschatten verwenden um einen sich bewegenden Regenbogen zu erzeugen.
Einmal mit canvas und einmal mit Css
Der hier verwendete Code
<!DOCTYPE html>
<html lang="en">
<head>
<title>Rainbow Text-shadow - Matthew Lein</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<style>
#example {
background-color:#000;
padding: 5px;
margin-bottom: 20px;
}
#example #holder {
display: block;
font-size: 250px;
font-family: sans-serif;
text-align: center;
color:#fff;
letter-spacing: 50px;
margin-top: 90px;
margin-bottom: 0px;
}
.beginTest {
margin-bottom: 10px;
}
canvas {
border: 1px solid black;
background-color: #000;
display: block;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="site-wrapper">
<main class="main article">
<h1 class="article__heading">
Rainbow Text-shadow </h1>
<section class="article__demo">
<script src="https://matthewlein.com/assets/js/lib/jquery-2.1.1.min.js"></script> <script>
$(document).ready(function(){
colors = [
'#EC1C24',
'#EE5727',
'#EF9129',
'#F7C115',
'#FFF100',
'#80CB29',
'#00A551',
'#0E8D86',
'#1B75BB',
'#564EA5',
'#90278E',
'#BE2259'
]
newColors = []
for (a=0;a<=colors.length-1;a++) {
for (b=1;b<=5;b++) {
newColors.push(colors[a])
}
}
function changeColors(){
z = 0
//C
xOffset = 0
yOffset = 0
//S
xOffset2 = 0
yOffset2 = 0
//S2
xOffset3 = 0
yOffset3 = 0
currentColor = newColors[z]
newShadow = xOffset + "px " + yOffset + "px " + currentColor
letterOne = document.getElementById("one")
letterTwo = document.getElementById("two")
letterThree = document.getElementById("three")
holder = document.getElementById("holder")
letterOne.style.textShadow = newShadow
letterTwo.style.textShadow = newShadow
letterThree.style.textShadow = newShadow
holder.removeChild(letterOne)
holder.removeChild(letterTwo)
holder.removeChild(letterThree)
for (z=0;z<=newColors.length;z++) {
currentColor = newColors[z]
//for C
xOffset++
yOffset--
currentShadow = letterOne.style.textShadow
newShadow = currentShadow + ',' + xOffset + "px " + yOffset + "px " + currentColor
letterOne.style.textShadow = newShadow
//for S
yOffset2--
currentShadow = letterTwo.style.textShadow
newShadow = currentShadow + ',' + xOffset2 + "px " + yOffset2 + "px " + currentColor
letterTwo.style.textShadow = newShadow
//for S
xOffset3--
yOffset3--
currentShadow = letterThree.style.textShadow
newShadow = currentShadow + ',' + xOffset3 + "px " + yOffset3 + "px " + currentColor
letterThree.style.textShadow = newShadow
}
holder.appendChild(letterOne)
holder.appendChild(letterTwo)
holder.appendChild(letterThree)
lastColor = newColors.pop()
newColors.unshift(lastColor)
}
changeColors()
canvas = document.getElementById('canvasRainbow')
ctx = canvas.getContext('2d');
ctx.globalCompositeOperation = 'destination-over';
ctx.font = 'bold 250px sans-serif';
function canvasChangeColors(){
ctx.clearRect(0,0,canvas.width,canvas.height)
//Create C
ctx.fillStyle = '#FFF';
xPos = 20
yPos = 300
ctx.fillText('C', xPos, yPos);
for (z=0;z<=newColors.length;z++) {
currentColor = newColors[z]
xPos++
yPos--
ctx.fillStyle = currentColor
ctx.fillText('C', xPos, yPos);
}
//Create S
ctx.globalCompositeOperation = 'source-over';
ctx.fillStyle = '#FFF';
xPos = 250
yPos = 300
ctx.fillText('S', xPos, yPos);
ctx.globalCompositeOperation = 'destination-over';
for (z=0;z<=newColors.length;z++) {
currentColor = newColors[z]
yPos--
ctx.fillStyle = currentColor
ctx.fillText('S', xPos, yPos);
}
//Create S
ctx.globalCompositeOperation = 'source-over';
ctx.fillStyle = '#FFF';
xPos = 460
yPos = 300
ctx.fillText('S', xPos, yPos);
ctx.globalCompositeOperation = 'destination-over';
for (z=0;z<=newColors.length;z++) {
currentColor = newColors[z]
xPos--
yPos--
ctx.fillStyle = currentColor
ctx.fillText('S', xPos, yPos);
}
//move the last color to the front
lastColor = newColors.pop()
newColors.unshift(lastColor)
}
canvasChangeColors()
var rainbowInt;
var canvasInt;
$('#madness').on('click', function(event) {
if ( !$(this).data('isClicked') ) {
rainbowInt = setInterval(changeColors,1000/60);
$(this).text('Stop the Madness!')
$(this).data('isClicked', true);
} else {
clearInterval(rainbowInt)
$(this).text('Begin the Madness!')
$(this).data('isClicked', false);
}
});
$('#canvasTest').on('click', function(event) {
if ( !$(this).data('isClicked') ) {
canvasInt = setInterval(canvasChangeColors,1000/60)
$(this).text('Stop the canvas!')
$(this).data('isClicked', true);
} else {
clearInterval(canvasInt);
$(this).text('Let the canvas rip!')
$(this).data('isClicked', false);
}
});
})
</script>
</section>
<div class="container container--mid">
<article class="article__body article__body--text">
<h2>CSS Version</h2>
<button name="madness" id="madness" class="beginTest">Begin the Madness!</button>
<div id="example">
<span id="holder"><span id="one">C</span><span id="two">S</span><span id="three">S</span></span>
</div>
<h2>Canvas Version</h2>
<button name="canvasTest" id="canvasTest" class="beginTest">Let the canvas rip!</button>
<canvas id="canvasRainbow" width="650" height="400"></canvas>
</article>
</div>
</main>
<script>
</script>
</div>
</body>
</html>