讓你的網頁圖標(Favicon)變成動感的餅圖動畫


您可能還喜歡

  網頁圖標(Favicon),就是頁面標題前面的那個小圖標,一般命名為 favicon.ico,存放在網站的根目錄下面。這個功能最早由微軟創設,目前主流的瀏覽器都支持。今天這篇文章教大家如何使用 Piecon 生成動感的網頁圖標加載動畫,效果如下:

 

 

Piecon 基本原理

 

  Piecon 是著名的代碼托管平台 Github 上的開源庫,能夠動態生成餅圖(Pie Charts)模式的網頁圖標,同時可以顯示加載的百分比。它的靈感來源於動態控制網頁圖標的開源庫 Tinycon,同樣托管在 Github 上面。

  Piecon 的基本原理是利用 HTML5 的 Canvas 標簽繪制餅圖並導出為圖片,核心代碼如下:

var drawFavicon = function(percentage) {
	var canvas = getCanvas();
	var context = canvas.getContext("2d");
	var percentage = percentage || 0;
	var src = currentFavicon;

	var faviconImage = new Image();
	faviconImage.onload = function() {
		if (context) {
			context.clearRect(0, 0, 16, 16);

			// Draw shadow
			context.beginPath();
			context.moveTo(canvas.width / 2, canvas.height / 2);
			context.arc(canvas.width / 2, canvas.height / 2, Math.min(canvas.width / 2, canvas.height / 2), 0, Math.PI * 2, false);
			context.fillStyle = options.shadow;
			context.fill();

			// Draw background
			context.beginPath();
			context.moveTo(canvas.width / 2, canvas.height / 2);
			context.arc(canvas.width / 2, canvas.height / 2, Math.min(canvas.width / 2, canvas.height / 2) - 2, 0, Math.PI * 2, false);
			context.fillStyle = options.background;
			context.fill();

			// Draw pie
			if (percentage > 0) {
				context.beginPath();
				context.moveTo(canvas.width / 2, canvas.height / 2);
				context.arc(canvas.width / 2, canvas.height / 2, Math.min(canvas.width / 2, canvas.height / 2) - 2, (-0.5) * Math.PI, (-0.5 + 2 * percentage / 100) * Math.PI, false);
				context.lineTo(canvas.width / 2, canvas.height / 2);
				context.fillStyle = options.color;
				context.fill();
			}

			setFaviconTag(canvas.toDataURL());
		}
	};

	// allow cross origin resource requests if the image is not a data:uri
	// as detailed here: https://github.com/mrdoob/three.js/issues/1305
	if (!src.match(/^data/)) {
		faviconImage.crossOrigin = 'anonymous';
	}

	faviconImage.src = src;
};

  生成URL形式的圖片然后設置到 Favicon 的URL上並使用 setInterval 函數周期性更新。所以 Piecon 顯示的加載進度效果並不是網頁上實際內容的加載進度,只是一種模擬效果。例如我們平常配置網頁圖標的代碼如下:

<link type="image/x-icon" rel="icon" href="favicon.ico">

  使用 Piecon 生成的餅圖模式的網頁圖標是Base64編碼的URL字符串,代碼如下:

<link type="image/x-icon" rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABuklEQVQ4T41Tv0vDUBC+1IAojdQq3VVwUSxSdVD8DQ5OWsFNcdTBdhF0UJD6D9j+BS5uom46aLE4WSSYQhFxEmxLl1YaQSUp8e6ZxPYlFh8c7+5e7nvfXb4nALcMwwhiagFtAm3QPFZwv0E7FwSBfHsJtQEWb2J8iObhgc24jPs+giSscxsAi08wuUQHhUIB8vk8qKoKY+E0fHZLUF3tA1+ESLF1iiDsWwaAxRHc4rquQyaTgVKpZBOYmU+DRzNYrA75oeViBcROL4VRYiKYPd9jQpRlua6YvqoFYCAjHSDdrZNL7UwTwC46B0Q7m83aN1sOD0D5t/i41c4eAVxhbtbtdjcGHItrAihiMpBKpUDTtH8x0CURxMo2a6MhgPiuw+SyDII5RAtd9zaBqO6wbhq20K5UILT16GBVM0jWwp9D7DrOQc/RqwOAHyJJN4nm5wc5EHuGwO2vJtgAh/0gpTcYfbQph5AURYFymX4xwOjaA7TmvmwGagiFdMkJyTrlpVx8eoHgXBKqzR746G1DKfeDL2pL+QxVGKZat8cUw7zP0fhPgmjTY4pb53UAlDSlvYiu23Omm+ue8zcnJOKk+8JFaQAAAABJRU5ErkJggg==">

  把 href 中的代碼粘貼到瀏覽器地址欄回車即可看到圖片,感興趣的朋友可以試驗一下。點擊測試

   

Piecon 使用方法

  

  相信大家看了前面的介紹之后,對 Piecon 的基本原理都了解了,那么它的使用方法就更簡單了。

  首頁需要引入 piecon.js 文件:

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

  然后設置 piecon 的顯示選項,並周期性更新,代碼如下:

(function(){
	var count = 86;
	Piecon.setOptions({
		color: '#ff0084', // 餅圖顏色
		background: '#eee', // 餅圖空白部分的顏色
		shadow: '#fff', // 餅圖外環顏色
		fallback: 'force' // true:顯示餅圖, false:顯示百分比, 'force':同時顯示餅圖和百分比)
	});
	var i = setInterval(function(){
		if (++count > 100) { Piecon.reset(); clearInterval(i); return false; }
		Piecon.setProgress(count);
	}, 250);
})();

  setProgress 方法用於設置百分比,上面代碼中我們初始設置百分比為86,也可以設置為0或者其它值:

Piecon.setProgress(12);
Piecon.setProgress(25);
Piecon.setProgress(50);

   瀏覽器兼容:因為使用了 HTML5 Canvas 標簽,所以在 Chrome 中效果最好,Firefox 和 Opera 餅圖會閃爍,Safari 和 IE 只能顯示百分比。這個效果完整的代碼如下:

<!doctype html>
<html>
<head>
  <title>Piecon</title>
  <link rel="icon" href="favicon.ico" />
  <script src="piecon.js"></script>
  <script>
  (function(){
    var count = 86;
    Piecon.setOptions({
		color: '#ff0084',
		background: '#eee',
		shadow: '#fff',
		fallback: false
	});
    var i = setInterval(function(){
      if (++count > 100) { Piecon.reset(); clearInterval(i); return false; }
      Piecon.setProgress(count);
    }, 250);
  })();
  </script>
</head>
<body>
</body>
</html>

 

點擊預覽效果      下載示例代碼

 

您可能還喜歡

 

本文鏈接:網頁效果實戰:使用 Piecon 生成動感的網頁圖標

編譯來源:夢想天空 ◆ 關注前端開發技術 ◆ 分享網頁設計資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM