🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 在开发中,如果要使用一个背景图,可能需要加载几十到一两百KB的图片,无疑是耗费流量,延迟了页面的展现。如果仅仅是纯色或者规则渐变的背景,完全可以用canvas来实现。 >[info] 效果图如下: 可拆解为--矩形+弧形区填充+弧线 ![](https://box.kancloud.cn/86570513bc55e0194a55471770719870_626x300.png) ~~~ 具体代码(全部复制到.html文件里就可在浏览器打开): <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Canvas_Background</title> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"> <style type="text/css"> html, body{ margin: 0; padding: 0; } #canvas_wrap { width: 100%; height: 100vh; } #canvas { position: absolute; z-index: -1; } </style> </head> <div id="canvas_wrap"> <canvas id="canvas"></canvas> </div> <body> <script type="text/javascript"> let parentDiv = document.getElementById('canvas_wrap').getBoundingClientRect(), offsetW = parentDiv.width, offsetH = parentDiv.height, canvasEle = document.getElementById('canvas'), ctx = canvasEle.getContext('2d'), grd = ctx.createLinearGradient(0, 0, offsetW, 0); canvasEle.setAttribute('width', offsetW); canvasEle.setAttribute('height', offsetH); grd.addColorStop(0, '#4AAAF9'); // 开始颜色 grd.addColorStop(1, '#2F4EFE'); // 结束颜色 // 绘制矩形部分 ctx.fillStyle = grd; // 填充使用自定义的渐变规则 ctx.fillRect(0, 0, offsetW, 200); // 绘制弧形部分 ctx.beginPath(); ctx.moveTo(0, 200); ctx.quadraticCurveTo(offsetW / 2, 600, offsetW, 200); ctx.fill(); // 绘制弧线 ctx.moveTo(0, 200); ctx.quadraticCurveTo(offsetW / 2, 660, offsetW, 300); ctx.strokeStyle = grd; ctx.lineWidth = 1.5; ctx.stroke(); </script> </body> </html> ~~~