说明

和大家分享一个看上去很酷的效果,先来看效果图吧!

解释

实现这个效果的思路就是,一个大的div元素,设置好一个背景,生成一定数量小的div元素,背景设置成同样的图片,但是每个小div元素的 background-position 属性值不同,整齐的覆盖在大的div元素上,这样就能拼成一张完整的背景图,鼠标移入时,让所有小的div元素移动和变形。

总的来说就是两步:

1、生成小的div元素,整齐的覆盖在大的div元素上,像下图这样(为了方便看,把每个小div元素,分开了些)。

2、鼠标移入时,让所有小div元素动起来,主要是改变小div元素的left、top、opacity、transform属性的值

具体实现的代码也并不多,下面是注释很详细的代码。

完整代码

body {

overflow: hidden;

}

#container {

width: 400px;

height: 300px;

margin: 150px auto 0 auto;

position: relative;

}

window.onload = burst;

function burst() {

// ready 用来避免高频率的产生动画效果

var ready = true;

// 容器

var img = document.querySelector('#container');

// 动画时间,单位是s

var S = 1;

// 每行 R 个 碎片

var R = 4;

// 每列 C 个 碎片

var C = 7;

// 容器宽度

var W = parseInt(window.getComputedStyle(img)['width']);

// 容器高度

var H = parseInt(window.getComputedStyle(img)['height']);

// 控制碎片的范围

var N = 2;

// 碎片分散时,整个活动范围的宽

var maxW = N * W;

// 碎片分散时,整个活动范围的高

var maxH = N * H;

// 控制显示第 now 张图片

var now = 0;

// 保存图片路径的数组

var imgArr = [

'https://kkkk1000.com/images/ExplosionPictureSwitching/1.jpg',

'https://kkkk1000.com/images/ExplosionPictureSwitching/2.jpg',

'https://kkkk1000.com/images/ExplosionPictureSwitching/3.jpg',

];

img.style.background = 'url(' + imgArr[0] + ') no-repeat';

var next = function () {

return (now + 1) % imgArr.length;

}

img.onmouseover = function () {

// 如果ready 为false 不产生动画效果

if (!ready) return;

ready = false;

// 创建文档片段

var html = document.createDocumentFragment();

// 修改容器背景图

if (now + 1 >= imgArr.length) {

img.style.background = 'url(' + imgArr[0] + ') no-repeat';

} else {

img.style.background = 'url(' + imgArr[now + 1] + ') no-repeat';

}

// posArr 用来保存每个碎片的初始位置和结束位置,

var posArr = [];

var k = 0;

// 生成一定数量的小div元素,覆盖在容器上

for (var i = 0; i < R; i++) {

for (var j = 0; j < C; j++) {

posArr[k] = {

// left 代表碎片初始时的 left 值

left: W * j / C,

// top 代表碎片初始时的 top 值

top: H * i / R,

// endLeft 代表动画结束时的 left 值

endLeft: maxW * j / C - (maxW - (maxW - W) / C - W) / 2,

// endTop 代表动画结束时的 top 值

endTop: maxH * i / R - (maxH - (maxH - H) / R - H) / 2,

// (maxW-(maxW-W)/C-W)/2 和 (maxH-(maxH-H)/R-H)/2 是为了让碎片能在容器的周围散开

};

// 创建一个div,一个div就是一个碎片

var debris = document.createElement("div");

// url 用来表示碎片的背景图的路径

var url = imgArr[now];

// 初始时,碎片的样式

debris.style.cssText = `

position: absolute;

width: ${Math.ceil(W / C)}px;

height: ${Math.ceil(H / R)}px;

background: url(${url}) -${posArr[k].left}px -${posArr[k].top}px no-repeat;

left: ${posArr[k].left}px;

top: ${posArr[k].top}px;

opacity:1;

transition:${randomNum(0.1, S)}s ease;

`;

// 把创建的每个div,添加到文档片段中

html.appendChild(debris);

k++;

}

}

// 把文档片段 加到DOM树中

img.appendChild(html);

// 获取容器的所有子元素,也就是所有的碎片

var debrisAll = img.children;

// 改变每个碎片样式,实现动画效果

setTimeout(function () {

for (var i = 0; i < debrisAll.length; i++) {

var l = posArr[i].endLeft;

var t = posArr[i].endTop;

debrisAll[i].style.cssText += `

left : ${l}px;

top : ${t}px;

opacity :0;

transform:perspective(500px) rotateX(${randomNum(-180, 180)}deg) rotateY(${randomNum(-180, 180)}deg) rotateZ(${randomNum(-180, 180)}deg) scale(${randomNum(1.5, 3)});

`;

}

// 动画效果完成后

// 删除碎片

// 把ready 设置为true,可以再次产生动画效果

// 改变 now的值,也就是改变当前要显示的图片

setTimeout(function () {

img.innerHTML = '';

ready = true;

now = next();

}, S * 1000);

}, 100);

}

// 产生一个 n - m 之间的随机数

function randomNum(n, m) {

return Math.random() * (m - n) + n;

}

}

java爆炸图片切换,JavaScript实现爆炸碎片的 图片切换 效果相关推荐

  1. 显示隐藏图片html,JavaScript实现显示和隐藏图片

    JavaScript之显示和隐藏图片,供大家参考,具体内容如下 点击按钮可以显示和隐藏图片(默认显示),附上代码: 显示和隐藏图片 隐藏 // 1.获取事件源 var obtn = document. ...

  2. 网页制作用JavaScript实现不同风格的图片切换效果

    1.资源下载     首先需要下载一个myFocus库(资源包),里面包含数种不同风格的实现效果.    下载地址:http://download.csdn.net/detail/antaomen/9 ...

  3. JavaScript之图片切换(类似淘宝商品图切换)

    JavaScript之图片切换 下边给出几种方法进行图片切换: 方法一(小白专用款!简单易懂) 下边附上代码: <!DOCTYPE html> <html lang="en ...

  4. html5自动换图,html5教你做炫酷的碎片式图片切换 (canvas)

    前言 老规矩,先上源码.图片区域是可以点击的,动画会从点击的位置开始发生. 本来这个效果是我3年前做的,只是当是是用无数个 div 标签完成的,性能比较成问题,在移动端完全跑不动.最近心血来潮想学习一 ...

  5. html实现简单图片切换,JavaScript实现简单的图片切换

    JavaScript实现图片切换,主要用到setInterval()函数和clearInterval()函数,前者功能是开启动画,后者功能则为清除动画(可理解为使动画停止),为了使动画停止,则需要定义 ...

  6. java点击按钮隐藏图片6_原生JS实现隐藏显示图片 JS实现点击切换图片效果

    今天要说的内容,看标题就都能知道了!所有知识点一览无遗啊!咱们今天的东西,是纯纯的原生JS代码, 我先说一下要求: 1.有两个按钮,内容为显示,和换, 2.当点击显示的时候,按钮文字变成隐藏,同时图片 ...

  7. 2017 年度编程语言榜,Java 最流行、JavaScript 最没价值?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! [CSDN编者按]在之前的 TIOBE 年度榜单中,宝刀未老的 C 语言成功逆袭,成为 20 ...

  8. java图片特效轮播代码_JQuery实现图片轮播效果

    [实例演示] 1 2 3 4 用JQuery操作DOM确实很方便,并且JQuery提供了非常人性化的API应付我们的各种需求,其中选择器在此示例-"JQuery实现图片轮播效果"上 ...

  9. java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)

    前言: 在我另一篇笔记中已经记载了如何用nginx + vsftp搭建图片服务器(请参考nginx + vsftp搭建图片服务器),并且用vsftp的客户端工具filezilla测试过已经可用.但是在 ...

  10. JavaScript实现N个视频的切换

    需求 :使用JavaScript实现一定数量的视频切换是非常简单的,类似功能如图片切换等等. HTML中有一个div,如下: <div id="video" class=&q ...

最新文章

  1. 11.3-全栈Java笔记:线程的生命周期
  2. pip卸载模块/宏包(python)
  3. 重写Notification有感~~
  4. STM32F103单片机系统时钟部分归纳
  5. 「Android」 详细全面的基于vue2.0Weex接入过程(Android视角)
  6. SpringSecurity remember功能基本实现
  7. 摆放家具-家具类以及创建家具对象
  8. 吉林大学计算机英语成绩,吉林大学复试出结果,初试分差84分,复试成绩却相差无几!...
  9. 回文质数(洛谷-P1217)
  10. mysql利用内存表导入数据_Mysql 大量数据导入
  11. mpython 编译_使用-m选项或n执行Python代码
  12. SpringBoot配置RestTemplate的代理和超时时间
  13. oracle管理表空间和数据文件(笔记)
  14. nodejs 服务端 音频拼接 合成 实现
  15. Java使用easyExcel操作Excel案例
  16. python 希尔伯特变换_信号处理——Hilbert变换及谱分析
  17. 从 Sentence-BERT 谈句子表征
  18. 720实训——智慧消防案例分析
  19. 如何在多个视频画面的任意位置上添加上同一张图片
  20. 将栅格影像转换为CAD/GIS矢量的3种方法

热门文章

  1. 兜了一圈,发现想要的APK在这里有
  2. 我的第一个“大工程”,欢迎来到m78星云
  3. 一键seo提交收录_做SEO优化长尾关键词排名你需要这些网站收录提交入口资源
  4. 什么是三网合一短信接口呢
  5. 脸部各部位长痘痘的原因
  6. 计算机辅助公差技术主要研究内容,计算机辅助形位公差类型生成技术的分析研究.pdf...
  7. groovy使用场景
  8. ajax英文翻译,Ajax[埃阿斯]英文名的中文翻译意思、发音、来源及流行趋势-千代英文名...
  9. Linux文件颜色与文件类型对应(白色、蓝色、红色、黄色、绿色 代表的意义。。。)
  10. NL驱动表错误导致的性能问题