分享好友 资讯文章首页 资讯文章分类 切换频道

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

2023-03-23 10:27IP属地 广东佛山420建站助手
基于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
仿萤火虫通信无人机:“灯光秀”中展绝技
  萤火虫尾部的点点闪光,是它们交流沟通的方式,不同频率的荧光可以帮助萤火虫向同伴传递识别、预警和指引方向等信号。  近日,模仿萤火虫利用发光传递信息,西北工业大学李学龙科研团队利用光通信和智能信息处理等技术,解决了无人机易受电磁干扰的难题,使无人机群突破更多严苛条件限制,实现高效协同工作。  捕捉光的密码  近年来,无人机集群在飞行表演、快递物流、精准农业、城市交通

2024-06-089

中国科学家合成新核素锇-160和钨-156
总台央视记者 帅俊全 褚尔嘉  记者从中国科学院近代物理研究所获悉,该所与合作单位组成的科研团队近期首次合成了新核素锇-160、钨-156。相关成果2月15日在国际学术期刊《物理评论快报》(Physical Review Letters)发表。  原子核是由质子和中子组成的量子多体系统。不同数量的质子和中子,构成了具有不同性质的原子核,科学家们把它们称为核素。合成和研

2024-04-2913

网传华为将全面主导AITO汽车 官方回应:有一定的误读
2月11日消息,有网友注意到AITO官方微博发布的问界汽车海报,右上角的logo已经变成了HUAWEI,连华为招牌的菊花标都有的那种,而在此之前海报左上角logo的位置,都写的是AITO。此外,还有疑似群聊截图曝光,从内容来看,是涉及AITO品牌话术的重要改动。其表示,近期已与赛力斯方高层达成一致,为强化品牌独特性,即日起,品牌话术不再用“华为深度赋能&r

2023-04-2027

或为问界M9 赛力斯大型SUV专利图曝光:有点“震撼”
快科技4月11日讯,网络上流传出一组赛力斯全新大型SUV的专利图,该车或许就是今年将要推出的AITO问界M9。从专利图看,这台车使用了类似AITO问界M5的设计语言,前脸拥有梯形进气格栅、硕大的灯组,同时也配备有贯穿式LED日行灯带,只不过这样的造型,跟零跑早期的S01有点类似,乍看之下,还挺怪异。该车车头两侧还设有激光雷达,位置跟阿维塔11保持一致,均为翼子板处,但

2023-04-1123

比亚迪车主用木头手工还原汉EV:前后双电机 真能跑
据快科技4月9日消息,日前,B站42万粉丝UP主“天亮手工”为纪念人生第一辆汽车,用木料手工还原比亚迪汉EV。木质机身、木质车轮,就连内饰都是纯木的,就连比亚迪标志性的旋转中控屏都还原了。关健这辆车模还能跑,UP主在前后轮位置分别安装了两个小马达,并焊接了控制电路,实现前后双电机、四轮驱动的效果。网友调侃:为了做模型居然买了一辆真车,他真的,我

2023-04-0925

小鹏再放G6官图 网友吐槽车标位置:设计师可以辞退了
作为旗舰级SUV,G9并没有为小鹏带来太多的市场热度,这也直观地反映在了交付量上。不过,接下来小鹏将推出的轿跑SUVG6或许会带来一丝希望。据CNMO了解,小鹏汽车官微近段时间一直在为G6进行预热,并先后放出了该车的低伪装照片。4月6日,小鹏再次放出G6的官图,结果logo设计被网友吐槽了一波。小鹏G6官图根据官方最新放出的图片,小鹏G6在灯带设计上延续了家族化的设计

2023-04-0628

铁路路基上的“碎石子”是怎么铺的?“特殊火车”边走边卸
如果你经常坐火车出行,可能会注意到这样一个事实:一些铁路的路基上,铺满了密密麻麻的“碎石子”,那么这种碎石子叫什么,有什么用,又是怎么被铺成的呢?@中国铁路官方就此进行了科普。叫什么、有什么用?普速铁路路基上铺设的“碎石子”学名叫“道砟”(dào zhǎ),是一种经过专门加工的石料,

2023-04-0631

网站页面SEO优化之页面title标题优化
网站页面SEO优化之页面title标题优化:在seo优化中,标题的优化占着举足轻重的地位,无论是从用户体验的角度出发,还是从搜索引擎的排名效果出发,title标题都是页面优化最最重要的因素。笔者总结了优化title标题应该注意的六个方面:①、title标题在页面html源码中的位置注意,这里提到的位置,不是页面的展示效果中标题所处的位置,展示效果中标题在浏览器中所处的

2023-03-2346

详解HTML元素的height offsetHeight clientHeight scrollTop等梳理
详解HTML元素的height offsetHeight clientHeight scrollTop等梳理:这篇文章主要介绍了详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧关于元素的一些属

2023-03-2325