1 解決方案 瀏覽器的對象 window 只有一個 屬性是devicePixeRatio 的屬性 。該屬性表示了屏幕的設備像素比,即用幾個像素寬度渲染一個像素的問題 舉例子來講。 假設devicePixelRatio 的值爲2 一張100/100 大小的圖片 在Retina設備上 會用2個像素的空間。至關於圖片放大了一倍,圖片就會模糊 相似的,在 canvas context 中也存在一個 backingStorePixelRatio 的屬性,該屬性的值決定了瀏覽器在渲染canvas以前會用幾個像素來來存儲畫布信息。 backingStorePixelRatio 屬性在各瀏覽器廠商的獲取方式不同,因此須要加上瀏覽器前綴來實現兼容。 2 解決問題 【直接上代碼】web
<style> canvas { border: 1px solid red; width: 100%; } </style> <body> <canvas id="canvas" height="180"></canvas> </body> 1> 模糊的狀況 // 原始作法 var canvas = document.getElementById("canvas"); var ctx = canvas.getContext('2d'); ctx.font = '18px Geprgia'; ctx.fillStyle = '#999'; ctx.fillText('我是模糊的文字',50,50); 2> 清晰的狀況 // 獲取像素比 var getPixelRatio = function (context) { var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; //畫文字 var myCanvas = document.getElementById("my_canvas"); var context = myCanvas.getContext("2d"); var ratio = getPixelRatio(context); myCanvas.style.width = myCanvas.width + 'px'; myCanvas.style.height = myCanvas.height + 'px'; myCanvas.width = myCanvas.width * ratio; myCanvas.height = myCanvas.height * ratio; // 放大倍數 context.scale(ratio, ratio); context.font = "18px Georgia"; context.fillStyle = "#999"; context.fillText("我是清晰的文字", 50, 50);