模糊不清缘故
最先,必须了解canvas的展现体制。
<canvas id="map" width="375" height="667"></canvas>
我绘图了1张375px的canvas,iphone6的宽度也是375px,ok,canvas铺满了全部显示屏。
那末canvas的尺寸便是375px,canvas相近于照片,1张375px的照片,大家就把它作为是照片看来就行了。我,尖沙咀段坤说的。
假如遇到了显示屏宽度400px的手机上,那末照片会 拉伸,canvas也会拉伸,拉伸则必定会模糊不清。
那末iphone6的确是375px宽度的手机上,還是会出現模糊不清难题,为何呢?手机上端会存在高清屏的难题。也便是大家说的2倍屏或3倍屏,也叫作显示屏的DPI。高清屏在绘图页面时,会把2px的宽度3D渲染成1px,也就做到了高清的实际效果。也便是说,大家在高清屏下看到的375px实际上是750个像素点绘图出来的,canvas实际上是375px被拉伸到了750px再展现出来的,拉伸则必定会模糊不清。
好了,模糊不清的缘故了解了,实际上便是高清屏所带来的不便,如何处理呢?
处理方式
假如是2倍屏,大家把设计方案图上375px的canvas画成750px不就处理了?
设定canvas款式
这里大家不写width和height,而立即写style。把它当做是照片,大家先无论照片原宽高是是多少,无论拉伸還是缩小,立即让他铺满全部显示屏。style里写的宽高并不是照片的原宽高,也便是style里写的宽高其实不是canvas的真正宽高
<canvas id="map" style="width: 375px;height:330px;"></canvas>
设定canvas宽高
上面的style其实不是canvas的真正宽高,那末大家怎样设定它的宽高呢?
一般屏,2倍屏,3倍屏假如各自兼容?
<canvas id="map" style="width: 375px;height:330px;"></canvas> <script> let canvas = document.querySelector('#map'); // 获得到显示屏倒是是几倍屏。 let getPixelRatio = function(context) { var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; // iphone6下获得是2 const pixelRatio = getPixelRatio(canvas); // 设定canvas的真正宽高 canvas.width = pixelRatio * canvas.offsetWidth; // 想当于 2 * 375 = 750 canvas.height = pixelRatio * canvas.offsetHeight; </script>
那末canvas的宽高就变为了下图这样,750宽度的canvas,假如你是2倍屏我就恰好可以融入!!!
设定后的宽高
刚开始画点
例如,375的设计方案图上,有1个半径为2px的圆点,点的部位是x:100,y:100。
那末大家如今canvas的宽度是750,宽高变为了以前的2倍。以便视觉效果上部位维持不会改变,大家画点的部位就应当是x:100*pixelRatio,y:100*pixelRatio。
详细编码以下:
<canvas id="map" style="width: 375px;height:330px;"></canvas> <script> let canvas = document.querySelector('#map'); // 获得到显示屏倒是是几倍屏。 let getPixelRatio = function(context) { var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; // iphone6下获得是2 const pixelRatio = getPixelRatio(canvas); // 设定canvas的真正宽高 canvas.width = pixelRatio * canvas.offsetWidth; // 想当于 2 * 375 = 750 canvas.height = pixelRatio * canvas.offsetHeight; // 刚开始画点 let ctx = canvas.getContext("2d"); ctx.beginPath(); // 375设计方案图上的部位和规格都应当*pixelRatio 由于大家如今的canvas是750 ctx.arc(100*pixelRatio, 100*pixelRatio, 2*pixelRatio, 0, 2 * Math.PI); ctx.fillStyle = "#fff"; ctx.fill(); ctx.closePath(); // ...你的别的编码 </script>
以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。