javascript 兼容不同手机的 canvas

当用户设置"width=device-width"时,网页宽度等于设备宽度.设备宽度会根据缩放比率计算,比如小米1280*720,则网页宽度为720px/设备缩放比率.

meta name="viewport" content="width=device-width"

缩放比例window.devicePixelRatio:

不同的手机会根据手机密度,缩放页面.获得缩放比例使用window.devicePixelRatio.

小米手机的缩放比例为2.就是1px,会被放大为2px;

所以如果想在小米显示全屏的话则使用.720px/2为实际手机上显示的宽度

关于canvas图片全屏的兼容:

假设两个手机分辨率分别是960*640的iphone4和1280*720的小米.优先保证iphone4的全屏.

1.由于iphone4是2倍缩放,所以设计的图片大小为480*320.这样可以在iphone4下全屏显示

2.兼容小米.主要原理就是缩放canvas,改变图片的大小以便全屏.

//图片本身大小
var nativeWidth = 320,nativeHeight = 480;
//获得页面宽度
var targetWidth = getWidth(); 
//计算宽度的缩放比率,供高度和canvas使用,这里不计算高度的缩放,避免失真
var ratio = targetWidth/nativeWidth;

//设置舞台的缩放比率
stage = new createjs.Stage(pCanvas);
stage.scaleX = radio;
stage.scaleY = radio;


//获取屏幕宽度
//这里不用window.screen.availWidth,避免iphone下的错误而且安卓下,screen的width为分辨率宽度
function getWidth() {
var xWidth = null;

if (window.innerWidth !== null) {
xWidth = window.innerWidth;
} else {
xWidth = document.body.clientWidth;
}

return xWidth;
}

-----------------------------------------------

1. 像素:其实所有的画面都是由一个个的小点组成的,这一个个的小点就称之为像素。 一块方形的屏幕横向有多少个点,竖向有多少个点,相乘之后的数值就是这块屏幕的像素(数码相机的像素也是这么乘积出来的)。
2.尺寸:手机的尺寸是对角线的长度,单位是英寸
3.PPI||DPI: Dots per inch 所表示的是每英寸所拥有的像素, 图像ppi值越高,画面的细节就越丰富,因为单位面积的像素数量更多. ppi计算公式:公式表达为 PPI=√X^2+Y^2)/ Z (X:长度像素数;Y:宽度像素数;Z:屏幕尺寸大小) 比如iPhone4 的ppi计算如下: PPI=√960^2+640^2)/3.5
4.DIPs:Device-independent pixel 设备独立像素,不同设备有不同的显示效果,这个和设备硬件有关.基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,一个dips是160dpi屏幕上的一个点。 计算公式:DIPs =(DPI/160) * pixel
5.window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (DIPs))的比例。 公式表示就是:DIPs = 物理像素 / window.devicePixelRatio 物理像素就是指实际的px像素.

-----------------------------------------------

posted @ 2013-06-14 21:53  zhepama  阅读(1716)  评论(1编辑  收藏  举报