Heim  >  Artikel  >  Web-Frontend  >  HTML5版径向渐变梯度色彩

HTML5版径向渐变梯度色彩

PHP中文网
PHP中文网Original
2016-05-17 09:08:273151Durchsuche

HTML5版径向渐变梯度色彩

       有个读者问我如何用HTML5生成一个径向梯度色彩效果,而不使用图片。仔细思考下,其实这个问题一点都不难,请看代码。

1124.jpg

HTML

<!DOCTYPE html>
<html >
<head>
<meta charset="utf-8" />
<meta name="author" content="Script Tutorials" />
<title>HTML5 Radial Gradient | Script Tutorials</title>
<!-- add styles -->
<link href="css/main.css" rel="stylesheet" type="text/css" />
<!-- add script -->
<script src="js/script.js">
</script>
</head>
<body>
<div>
<canvas id="gradient" width="500" height="500" tabindex="1">
</canvas>
</div>
</body>
</html>

    JS

// Get angle color function
function getAngleColor(angle) {
var color, d;

if (angle < Math.PI * 2 / 5) { // angle: 0-72
d = 255 / (Math.PI * 2 / 5) * angle;
color = &#39;255,&#39; + Math.round(d) + &#39;,0&#39;; // color: 255,0,0 - 255,255,0
} else if (angle < Math.PI * 4 / 5) { // angle: 72-144
d = 255 / (Math.PI * 2 / 5) * (angle - Math.PI * 2 / 5);
color = (255 - Math.round(d)) + &#39;,255,0&#39;; // color: 255,255,0 - 0,255,0
} else if (angle < Math.PI * 6 / 5) { // angle: 144-216
d = 255 / (Math.PI * 2 / 5) * (angle - Math.PI * 4 / 5);
color = &#39;0,255,&#39; + Math.round(d); // color: 0,255,0 - 0,255,255
} else if (angle < Math.PI * 8 / 5) { // angle: 216-288
d = 255 / (Math.PI * 2 / 5) * (angle - Math.PI * 6 / 5);
color = &#39;0,&#39;+(255 - Math.round(d)) + &#39;,255&#39;; // color: 0,255,255 - 0,0,255
} else { // angle: 288-360
d = 255 / (Math.PI * 2 / 5) * (angle - Math.PI * 8 / 5);
color = Math.round(d) + &#39;,0,&#39; + (255 - Math.round(d)) ; // color: 0,0,255 - 255,0,0
}
return color;
}

// inner variables
var iSectors = 360;
var iSectorAngle = (360 / iSectors) / 180 * Math.PI; // in radians

// Draw radial gradient function
function drawGradient() {

// prepare canvas and context objects
var canvas = document.getElementById(&#39;gradient&#39;);
var ctx = canvas.getContext(&#39;2d&#39;);

// clear canvas
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);

// save current context
ctx.save();

// move to center
ctx.translate(canvas.width / 2, canvas.height / 2);

// draw all sectors
for (var i = 0; i < iSectors; i++) {

// start and end angles (in radians)
var startAngle = 0;
var endAngle = startAngle + iSectorAngle;

// radius for sectors
var radius = (canvas.width / 2) - 1;

// get angle color
var color = getAngleColor(iSectorAngle * i);

// draw a sector
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.arc(0, 0, radius, startAngle, endAngle, false);
ctx.closePath();

// stroke a sector
ctx.strokeStyle = &#39;rgb(&#39;+color+&#39;)&#39;;
ctx.stroke();

// fill a sector
ctx.fillStyle = &#39;rgb(&#39;+color+&#39;)&#39;;
ctx.fill();

// rotate to the next sector
ctx.rotate(iSectorAngle);
}

// restore context
ctx.restore();
}

// initialization
if(window.attachEvent) {
window.attachEvent(&#39;onload&#39;, drawGradient);
} else {
if(window.onload) {
var curronload = window.onload;
var newonload = function() {
curronload();
drawGradient();
};
window.onload = newonload;
} else {
window.onload = drawGradient;
}
}

以上就是HTML5版径向渐变梯度色彩的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn