1. 程式人生 > >【重點突破】——SVG技術動態隨機繪制圓形

【重點突破】——SVG技術動態隨機繪制圓形

str align oct cnblogs 字符 啟用 分享 back 範圍

一、引言

在學習Canvas繪圖技術時,做的是隨機驗證碼的例子,在學習SVG繪圖技術時,同樣也有一個隨機繪制的例子——動態隨機繪制圓形。這個練習,即綜合了多種SVG技術的知識點,又很具有藝術感,隨機生成的任意一張圖片都具有藝術之美。

二、要求

在SVG畫布上隨機的繪制30個實心圓形,大小隨機、位置隨機、填充顏色隨機、透明度隨機;點擊某個圓形後,它慢慢變大/淡,直至從DOM樹上刪除。

三、實現

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <
title></title> <style> body{ text-align: center; } svg{ background:#ddd; } </style> </head> <body> <h1>動態隨機繪制SVG圓形</h1> <svg id="s9" width="500" height="400"></svg> <script>
for(var i=0;i<30;i++){ var c = document.createElementNS (http://www.w3.org/2000/svg,circle); c.setAttribute(r,rn(10, 80)); c.setAttribute(cx,rn(0, 500)); c.setAttribute(cy,rn(0, 400)); c.setAttribute(fill,rc(0, 255)); c.setAttribute(
fill-opacity,Math.random(0, 1)); //坑:在定時器啟動時,所有圓形都已經繪制好,所以此處c會指向最後一個創建好的圓 c.onclick = function(){ var that = this;//留存this,解決閉包形成的問題 //為防止當前圓形再次被點擊,應取消其事件監聽 that.onclick = null; //啟用定時器,讓圓形慢慢變大變淡 var t = setInterval(function(){ var r = that.getAttribute(r); r *= 1.05;//註意:*=已經自動把字符串變成浮點數 that.setAttribute(r,r); var p = that.getAttribute(fill-opacity); p *= 0.9; that.setAttribute(fill-opacity,p); if(p<0.0001){//當前圓形幾乎已經看不見,停掉定時器 clearInterval(t); that.parentNode.removeChild(that); } },30); } s9.appendChild(c); } //random number:返回指定範圍內的隨機整數 function rn(min,max){ var n = Math.floor(Math.random()*(max-min)+min); return n; } //random color:返回指定範圍內的隨機顏色 //形如:rgb(x,x,x) function rc(min, max){ var r = rn(min, max); var g = rn(min, max); var b = rn(min, max); return `rgb(${r},${g},${b})`; } </script> </body> </html>

效果:

技術分享

技術分享

技術分享

【重點突破】——SVG技術動態隨機繪制圓形