B2B商务网

微信扫一扫

微信小程序
天下好货一手掌握

扫一扫关注

扫一扫微信关注
天下好货一手掌握

基于HTML代码实现图片碎片化加载功能

   2023-03-23 IP属地 广东佛山建站助手470
核心提示:基于HTML代码实现图片碎片化加载功能:这篇文章主要介绍了基于HTML代码实现图片碎片化加载功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下今天来实现一个图片碎片化加载效果,效果如下:我们分为 3 个步骤来实现:定义 html 结构拆分图片编写动画函数定义html结构这里只需要一个 canvas 元素就可以了。
基于HTML代码实现图片碎片化加载功能:

这篇文章主要介绍了基于HTML代码实现图片碎片化加载功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

今天来实现一个图片碎片化加载效果,效果如下:

我们分为 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 ="/file/upload/230323/1xbfw5ti5if.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 ="/file/upload/230323/1xbfw5ti5if.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图片碎片化加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

来源:脚本之家

链接:https://www.jb51.net/web/731888.html

 
举报收藏 0打赏 0评论 0
免责声明
• 
本文源自建站助手发布的内容,本站会员编辑发布。
本网站对站内所有资讯的内容、观点保持中立,不对内容的准确性、可靠性或完整性提供任何明示或暗示的保证。
本网站部分内容来源于合作媒体、企业机构、网友提供和互联网的公开资料,版权归原作者所有,如有侵权等问题,请及时联系我们,我们将在收到通知后第一时间妥善处理该部分内容。info@1688b2b.com。

转载请注明原文出处: http://www.1688b2b.com/news/show-13115.html

 
更多>同类资讯文章
推荐图文
推荐资讯文章
点击排行
信息二维码

手机扫一扫

快速投稿

你可能不是行业专家,但你一定有独特的观点和视角,赶紧和业内人士分享吧!

我要投稿

投稿须知

【行业知识,产业动态、产品指南、产品应用等原创性内容优先审核发布。】
1、提交粗糙的广告软文或者对用户无任何帮助、无价值的文章将无法被通过审核。
2、发布内容时请选择合适的栏目归档。
3、严禁类同内容重复发布及标题堆砌关键字。
4、文章内容须与标题有一定相关性。
5、排版精美工整用户才愿意去看
6、以上不合规一律不予审核直接删除
7、审核时间一般24小时内,优质文章优先审核