说明

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

解释

实现这个效果的思路就是,一个大的div元素,设置好一个背景,生成一定数量小的div元素,背景设置成同样的图片,但是每个小div元素的 background-position 属性值不同,整齐的覆盖在大的div元素上,这样就能拼成一张完整的背景图,鼠标移入时,让所有小的div元素移动和变形。
总的来说就是两步:
1、生成小的div元素,整齐的覆盖在大的div元素上,像下图这样(为了方便看,把每个小div元素,分开了些)。

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

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

完整代码

<!doctype html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style>body {overflow: hidden;}#container {width: 400px;height: 300px;margin: 150px auto 0 auto;position: relative;}</style>
</head><body><div id="container"></div><script type="text/javascript">window.onload = burst;function burst() {// ready 用来避免高频率的产生动画效果var ready = true;// 容器var img = document.querySelector('#container');// 动画时间,单位是svar 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;}}</script>
</body>
</html>

总结

这个效果其实和上次实现的一个雪花效果很类似,
简单说 JavaScript实现雪花飘落效果 都是利用定时器实现的动画,定时器应该算是这个效果的重点了,该好好理解下。

这个效果,代码中设置的是让碎片在容器周围散开,当然你也可以在代码中修改 碎片的 endLeft 和 endTop 的值,来改变方向,比如如果改成这样

endLeft: maxW * j / C - (maxW - W),
endTop: maxH * i / R - (maxH- H),

产生的效果就是向左上方移动

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

  1. JavaScript实现爆炸碎片的 图片切换 效果 1

    说明 和大家分享一个看上去很酷的效果,先来看效果图吧! 解释 实现这个效果的思路就是,一个大的div元素,设置好一个背景,生成一定数量小的div元素,背景设置成同样的图片,但是每个小div元素的 ba ...

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

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

  3. 精致3D图片切换效果,最适合企业产品展示

    这是一个精致的立体图片切换效果,特别适合企业产品展示,可立即用于实际项目中.支持导航和自动播放功能, 基于 CSS3 实现,推荐使用最新的 Chrome,Firefox 和 Safari 浏览器浏览效 ...

  4. js原生带缩略图的图片切换效果

    js原生带缩略图的图片切换效果 本例中用到的 moveElement(elementID,final_x,final_y,interval)是来自<JavaScript DOM编程艺术(中文第二 ...

  5. click 点击图片不起作用_JavaScript 练手小案例:基于SVG的图片切换效果

    最近太忙了,自动来到rjxy后,不晓得怎么回事,忙的都没时间更博了. 昨天还有个同学跟我说,你好久没更新博客了.. 甚为惭愧~~ 正好12月来了,今天开一篇. 最近上课讲到了 SVG,不晓得同学们理解 ...

  6. html网页切换效果,css图片切换效果

    <title>html网页切换效果,css图片切换效果</title><link rel="stylesheet" href="./fami ...

  7. php幻灯片切换,JavaScript_JS实现FLASH幻灯片图片切换效果的方法,本文实例讲述了JS实现FLASH幻灯 - phpStudy...

    JS实现FLASH幻灯片图片切换效果的方法 本文实例讲述了JS实现FLASH幻灯片图片切换效果的方法.分享给大家供大家参考.具体实现方法如下: JS模拟FLASH幻灯片图片切换效果 /* ul,li{ ...

  8. 用CSS3制作令人印象深刻的产品展示图片切换效果

    用CSS3制作令人印象深刻的产品展示图片切换效果 产品页面是在您的网站上的任何页面展示产品.它必须描述产品的特点,给点截图展示.当然,这是你让访问者对你的产品感兴趣的地方,但它越来越难以抓住他们的注意 ...

  9. CSS+JS带缩略图随机切换方式的图片切换效果

    <html> <head> <title>CSS+JS带缩略图随机切换方式的图片切换效果丨芯晴网页特效丨CsrCode.Cn</title> <s ...

最新文章

  1. mysql5.6.20二进制安装
  2. 小学生计算机课堂实践的重要性,多媒体在小学教学中的重要性
  3. 通过递归算法完成树的级联勾选的一般思路
  4. java如何构造ajax回调参数,jQuery实现ajax回调函数带入参数的方法示例
  5. 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!
  6. 高效的SQLSERVER分页查询
  7. php csrf攻击 xss区别,XSS与CSRF攻击及防御方法
  8. 55个好习惯可令世界更美好(2)
  9. c语言数字黑洞123问题,PAT-B 1019 数字黑洞 (C语言)
  10. jmeter脚本增强
  11. 以下属于单例模式的优点的是_单例模式的优缺点和使用场景
  12. CO02工单下达时错误“订单类型 ZP91 工厂 1000: 没有检查工序的维护规则”
  13. 极乐净土—官方中文版 单曲循环洗脑三天了φ(ω*)
  14. 服务器如何防止被攻击
  15. Unity复制粘贴功能
  16. 菜鸟攒机之深度学习(上)
  17. 【UVA10859】Placing Lampposts
  18. 在IDEA中解决jar包冲突的神操作-必看
  19. MongoDB芒果数据库学习笔记一
  20. 蚂蚁军团的智慧对企业ERP建设的启示

热门文章

  1. 【提升coding能力】100道Python练习题11-20
  2. Git命令全解析-前端备忘录
  3. ❤️React Hooks⭐
  4. 【SSM - SpringMVC篇】03 - SpringMVC的参数绑定 - 参数自动绑定 - javabean对象参数绑 - 嵌套bean参数绑定
  5. 研究心得:调研文献“快而全“的三步
  6. LeetCode 59. 螺旋矩阵 II [水题+简单模拟]
  7. java实现读取excel用例,testNg自动化,读取excel的数据
  8. java.util.regex.PatternSyntaxException: Unclosed counted closure near index 14
  9. python判断字符串是否为大写字母、小写字母
  10. 最全最详细的蓝牙版本介绍包含蓝牙4.0和4.1