html循环加载多个图片,两行代码实现图片碎片化加载

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

1460000022995620

我们分为 3 个步骤来实现:

定义 html 结构

拆分图片

编写动画函数

定义 html 结构

这里只需要一个 canvas 元素就可以了。

id="myCanvas"

width="900"

height="600"

style="background-color: black;"

>

拆分图片

这个例子中,我们将图片按照 10 行 10 列的网格,拆分成 100 个小碎片,这样就可以对每一个小碎片独立渲染了。

let image = new Image();

image.src = "https://cdn.yinhengli.com/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:告诉浏览器,你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。

编写动画函数

接下来我们编写动画函数,让浏览器在每一次重绘前,随机渲染某个小碎片。

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);

}

}

完整代码

id="myCanvas"

width="900"

height="600"

style="background-color: black;"

>

let image = new Image();

image.src = "https://cdn.yinhengli.com/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);

}

}

总结

通过这个 Demo,我们使用了 canvasAPI 实现了图片的碎片加载效果,是不是特别简单!

1460000022995619

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从今开始,好好学习一下算法!

ACM 进阶之路(转)2007年12月30日 星期日 18:20一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.ACM主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。 下面给个计划你练练: 第一阶段&#xff1…

Redis(1) 简介以及linux环境下的安装

一、简介 Redis是个啥?它是一个key-value型的数据库,它是一个内存性的数据库,数据大量放在内存中,所以速度非常快,快到可以用来当缓存。当然它也有持久化的功能,可以把数据以文件的形式存在硬盘上&#xff…

谈*静态页*(或网页*静态化*)的时候,请区分一些概念(转)

http://www.cnblogs.com/JeffreyZhao/archive/2009/07/05/talk-about-page-statilization.html “静态页”,在Web应用程序开发中是很常见的概念。只是我发现目前还是有相当部分的朋友,在这方面的存在一定的误区。因此现在独立写一篇文章,也想…

html form src,form.html

Amaze UI Admin index Examples欢迎你, Amaze UI 43小时前夕风色Amaze UI 的诞生,依托于 GitHub 及其他技术社区上一些优秀的资源;Amaze UI 的成长,则离不开用户的支持。 2016-09-21 下午 16:405天前禁言小张为了能最准确的传达所描述的问题&…

tiny4412--linux驱动学习(2)

在ubuntu下编写验证字符设备驱动 并移植到arm开发板上 1&#xff0c;准备工作 uname -r 查看电脑版本信息 apt-get install linux-source 安装相应版本的linux内核2&#xff0c;编写驱动程序 Global CharDev.c /* GlobalCharDev.c */ #include <linux/module.h>…

学计算机需要多少内存,电脑内存多大才够用

现在内存的价钱越来越便宜&#xff0c;很多新装机的朋友都已经在使用1GB的内存&#xff0c;而还有很多人也在给老电脑的内存升级。在升级了物理内存之后&#xff0c;如何有效设置虚拟内存才能获得最大限度的性能提升?网上流传的一些优化虚拟内存的方法真的有效吗?下面学习啦小…

TreeView控件二(递归算法)

扩展了一下。每个控件都有其独特的写法和用法&#xff0c;treeview就是这样的一个控件。做个类似资源管理器的页面。如果逐层遍历&#xff0c;代码会不断重复&#xff0c;所以这时需要用递归算法 Codepublic static void TreeBindMethod(TreeView tvFile,string target) …

计算机中桌面中不显示U盘图标,电脑不显示u盘怎么回事 电脑不显示u盘的解决办法...

在平时的工作中&#xff0c;我们会经常使用到U盘来拷贝资料&#xff0c;U盘便于携带并且储存量大&#xff0c;所以很受大家的欢迎。但是平时我们在拷贝资料将U盘插入电脑中&#xff0c;会发现U盘在电脑中不显示&#xff0c;即使在桌面上仔细寻找也无济于事。这种情况小编也有遇…

spring-在配置文件中配置DAO时直接引用DataSource

一、创建spring项目 项目名称&#xff1a;spring101306二、在项目上添加jar包 1.在项目中创建lib目录 /lib 2.在lib目录下添加spring支持 commons-logging.jar junit-4.10.jar log4j.jar mysql-connector-java-5.1.18-bin.jar …

计算机基础知识总结及自学,计算机基础知识的简单总结

我说明一下&#xff0c;本文只是基于作者的个人理解所作出的总结&#xff0c;如果有什么不对的地方&#xff0c;希望大家给我指正&#xff0c;我会尽快更正的。我也想通过51cto这个大平台&#xff0c;能够与大家一同学习&#xff0c;一同交流&#xff0c;一同进步。1.计算机的组…

实验1.1

转载于:https://www.cnblogs.com/P201821430028/p/10689308.html

札记__ADT:URL,Lua:strlen方法

2019独角兽企业重金招聘Python工程师标准>>> 01&#xff0c;Android ADT 在线更新的URL&#xff1a; https://dl-ssl.google.com/android/eclipse/ 02&#xff0c;Lua中字符串长度的判断可以使用 # local str "abcabc" print(#str) --6 print(#"a…

vue中的适配:px2rem

这应该是vue项目在适配移动端时候&#xff0c;最简单的方法之一下面是基本步骤&#xff08;使用cnpm&#xff09;1.下载并引入lib-flexible cnpm install --save lib-flexible 在main.js中 &#xff1a;import ‘lib-flexible/flexible’2.引入px2rem-loader cnpm install --sa…

Java高级篇 -- List选择及优化

为什么80%的码农都做不了架构师&#xff1f;>>> 在java编程中&#xff0c;我们常常使用到java自带的集合类List 以下为几点简单的优化建议&#xff1a; 1.Vector还是ArrayList Vector有其特有有点&#xff0c;其每个方法都为同步方法【synchronized】&#xff0c…

每一件事情的开始总是很困难的!

每一件事情的开始总是很困难的&#xff01;我今天花了一下午的时间终于把开头做完了&#xff0c;希望底下的事情&#xff0c;顺顺当当的&#xff01;转载于:https://blog.51cto.com/7305256/1564904

html双翼布局,第19题 CSS如何实现双飞翼布局?

双飞翼布局如下图所示&#xff1a;有了圣杯布局的铺垫&#xff0c;双飞翼布局也就问题不大啦。这里采用经典的float布局来完成。HTML代码&#xff1a;双飞翼布局码云笔记mybj123.comCSS代码&#xff1a;*{margin: 0;padding: 0;}.container {min-width: 600px;}.left {float: l…

【原】关于AdaBoost的一些再思考

一、Decision Stumps&#xff1a; Decision Stumps称为单层分类器&#xff0c;主要用作Ensemble Method的组件&#xff08;弱分类器&#xff09;。一般只进行一次判定&#xff0c;可以包含两个或者多个叶结点。对于离散数据&#xff0c;可以选取该属性的任意一个数据作为判定的…

计算机系统时间无法更改,电脑时间不能修改|系统时间改不了 四个处理办法

电脑时间不能修改|系统时间改不了 四个处理办法&#xff1f;电脑时间不但可以让网友准确的查看时间&#xff0c;还对软件的运行、工作等方面至关重要&#xff0c;有时大家看电脑时间不准确想要修改&#xff0c;确发现改不了系统时间。碰到该故障的朋友不要惊慌&#xff0c;下面…

斐波那契数列(fabnacci)java实现

斐波那契数列定义&#xff1a;From Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Fibonacci_number In mathematics, the Fibonacci numbers or Fibonacci sequence are the numbers in the following integer sequence:[2][3] or (often, in modern usage)…

计算机二级offic考试题库2017,2017年9月计算机二级MSOffice考试题「带答案」

2017年9月计算机二级MSOffice考试题「带答案」一、单选题1). 存储一个3232点的汉字字形码需用的字节数是( )。A.256B.128C.72D.16正确答案&#xff1a;B2). 无符号二进制整数101001转换成十进制整数等于( )。A.41B.43C.45D.39正确答案&#xff1a;A3). 一个教师讲授多门课程&am…