基于HTML代码实现图片碎片化加载功能
建站知识 2021-07-02 22:42www.168986.cn长沙网站建设
今天来实现一个图片碎片化加载效果,效果如下
我们分为 3 个步骤来实现
- 定义 html 结构
- 拆分图片
- 编写动画函数
定义html结构
这里只需要一个 canvas 元素就可以了。
<html> <body> <canvas id="myCanvas" width="900" height="600" style="background-color: black;" ></canvas> </body> </html>
拆分图片
这个例子中,我们将图片按照 10 行 10 列的网格,拆分成 100 个小碎片,这样就可以对每一个小碎片独立渲染了。
let image = new Image(); image.src = "https://cdn.yinhengli./canvas-example.jpeg"; let boxWidth, boxHeight; // 拆分成 10 行,10 列 let rows = 10, columns = 20, counter = 0; image.onload = function () { // 计算每一行,每一列的宽高 boxWidth = image.width / columns; boxHeight = image.height / rows; // 循环渲染 requestAnimationFrame(animate); };
requestAnimationFrame 告诉浏览器,你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。
编写动画函数
接下来我们编写动画函数,让浏览器在每一次重绘前,随机渲染某个小碎片。
这里的核心是 context.drawImage 方法。
let canvas = document.getElementById("myCanvas"); let context = canvas.getContext("2d"); function animate() { // 随机渲染某个模块 let x = Math.floor(Math.random() columns); let y = Math.floor(Math.random() rows); // 核心 context.drawImage( image, x boxWidth, // canvas 中横坐标起始位置 y boxHeight, // canvas 中纵坐标起始位置 boxWidth, // 画图的宽度(小碎片图像的宽) boxHeight, // 画图的高度(小碎片图像的高) x boxWidth, // 从大图的 x 坐标位置开始画图 y boxHeight, // 从大图的 y 坐标位置开始画图 boxWidth, // 从大图的 x 位置开始,画多宽(小碎片图像的宽) boxHeight // 从大图的 y 位置开始,画多高(小碎片图像的高) ); counter++; // 如果模块渲染了 90%,就让整个图片显示出来。 if (counter > columns rows 0.9) { context.drawImage(image, 0, 0); } else { requestAnimationFrame(animate); } }
完整代码
<html> <body> <canvas id="myCanvas" width="900" height="600" style="background-color: black;" ></canvas> <script> let image = new Image(); image.src = "https://cdn.yinhengli./canvas-example.jpeg"; let canvas = document.getElementById("myCanvas"); let context = canvas.getContext("2d"); let boxWidth, boxHeight; let rows = 10, columns = 20, counter = 0; image.onload = function () { boxWidth = image.width / columns; boxHeight = image.height / rows; requestAnimationFrame(animate); }; function animate() { let x = Math.floor(Math.random() columns); let y = Math.floor(Math.random() rows); context.drawImage( image, x boxWidth, // 横坐标起始位置 y boxHeight, // 纵坐标起始位置 boxWidth, // 图像的宽 boxHeight, // 图像的高 x boxWidth, // 在画布上放置图像的 x 坐标位置 y boxHeight, // 在画布上放置图像的 y 坐标位置 boxWidth, // 要使用的图像的宽度 boxHeight // 要使用的图像的高度 ); counter++; if (counter > columns rows 0.9) { context.drawImage(image, 0, 0); } else { requestAnimationFrame(animate); } } </script> </body> </html>
通过这个 Demo,我们使用了 canvasAPI 实现了图片的碎片加载效果,是不是特别简单!
到此这篇关于基于HTML代码实现图片碎片化加载功能的文章就介绍到这了,更多相关html图片碎片化加载内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章,希望大家以后多多支持狼蚁SEO!
上一篇:html页面展示json数据并格式化的方法
下一篇:详解HTML设置边框的三种方式
长沙网站设计
- 如何进行东阳SEO关键词优化?
- 边坝哪有关键词排名优化:提升你的网站流量与
- 安国百度优化服务:提升您的在线可见性
- 阜康新手做SEO怎么做
- 山西seo网站排名关键词优化:提升您网站曝光率
- 临沂seo网站排名关键词优化:提高你的网站可见
- 广西SEO网站推广怎样付费比较合理
- 双辽SEO网站推广:提升你的网站可见性与流量
- 辽宁企业网站优化购买方式有哪些
- 提升宝清百度SEO排名的实用技巧与策略
- 静宁百度SEO排名:提升您网站曝光率的关键策略
- 彭州百度SEO排名的提升策略和实施指南
- 广南百度关键词SEO:提升网站排名的关键策略
- 辽宁关键词优化怎么做论坛营销
- 吉林百度seo排名如何做到让用户满意
- 内黄百度优化服务:提升在线可见性的关键