Html5—Canvas之如何自适应屏幕大小

本文介绍了两种在网页中创建并调整Canvas元素尺寸的方法,确保其能够根据屏幕实际可用宽度和高度进行适配,避免了外部CSS可能引起的拉伸问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只有内嵌css有效,外部css会出现拉伸的情况,
所以有两种方案

var myCanvas = "<canvas id='myCanvas' width='" + screen.availWidth + "px' height='"+ screen.availHeight + "px'></vanvas>";
document.body.insertAdjacentHTML("beforeEnd", myCanvas);
或者这种做法
var myCanvas = document.createElement("canvas");
myCanvas.setAttribute("width", screen.availWidth);
myCanvas.setAttribute("height", screen.availHeight);
myCanvas.setAttribute("id", "myCanvas");
document.body.appendChild(myCanvas);
两种方案的共性都是在把元素添加进DOM前设置他的大小

转载于:https://www.cnblogs.com/U5B89/p/9667214.html

### HTML5 Canvas 自适应最佳实践 为了确保 `canvas` 元素能够根据不同的屏幕尺寸和分辨率自动调整大小,可以采用以下方法: #### 设置 CSS 宽高属性 通过设置 canvas 的宽高为百分比来让其响应父容器的变化。然而这仅改变显示比例而不影响实际绘图区域。 ```css canvas { width: 100%; height: auto; } ``` 这种方法简单易行但是可能导致图像失真[^1]。 #### JavaScript 动态重设画布尺寸 更推荐的做法是在页面加载以及窗口大小变化时利用JavaScript动态更新 `<canvas>` 实际像素宽度高度: ```javascript function resizeCanvasToDisplaySize(canvas) { const displayWidth = canvas.clientWidth; const displayHeight = canvas.clientHeight; // Check if the canvas resolution matches the display size. if (canvas.width !== displayWidth || canvas.height !== displayHeight) { // If not, set it to match and clear the drawing buffer. canvas.width = displayWidth; canvas.height = displayHeight; return true; // Indicate that a change was made. } return false; // No changes were necessary. } // Call this function when you want to ensure your canvas is properly sized, // such as on window resize or page load events. window.addEventListener('resize', () => { let canvas = document.getElementById('myCanvas'); resizeCanvasToDisplaySize(canvas); }); ``` 此方式能保持图形质量并适配各种终端设备[^2]. #### 使用视口单位与媒体查询优化布局 结合CSS中的vw/vh相对长度单位及@media规则进一步增强灵活性: ```css @media only screen and (max-width: 768px){ /* For mobile phones */ .game-container{ padding-left : 5vw ; padding-right : 5vw ; } } .game-canvas { max-width:90vh ;/* Prevents overflow on small screens */ } ``` 上述策略共同作用下可达成良好的跨平台体验效果[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值