前言

  继一次的3D魔方之后,这次利用CSS3的transform、translate、rotate、preserve-3d等结合JS的requestAnimationFrameclass带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦?!想直接在线预览 ?

这里是@IT·平头哥联盟,我是首席填坑官∙苏南,用心分享 做有温度的攻城狮。
群:912594095

回顾:

  看过上次的3D魔方的同学对于本次的分析会有一定的帮助,当然如果大佬您本身就对css3就已经玩的很666了,那么对于下文的分解就请扮演老师的角色吧,小弟如有不足之处,欢迎斧正。

  • CSS3·画出最懂你的3D魔方
  • Canvas·手把手教你如何绘制一辆会跑车

解析:

创建列DIV :
  • 从上图中我们能看出,每次旋转的动画是由多列小卡片组成的;
  • 每列根据它的下标,对背景进行位移,做到拼接的效果,整体看起来就成了一张图
  • 一起来看一下真像是啥样的:


colNode(){//生成列的节点for (var i=0;i<this.colLen;i++){let iDivCol = document.createElement('div'); //列iDivCol.className = "div-col";iDivCol.style.width = this.colW+'px';iDivCol.style.height = this.cubeH+'px';iDivCol.style.zIndex = (i>this.colLen/2?this.colLen-i:i);this.swiperEle.appendChild(iDivCol);}
}
立体感的构成 :
  • 旋转的立体感是如何构成的呢?
  • 原理其实很简单,可以理解成每列都是一个立体魔方,它们都是相互独立的,
  • 每列 backgroundPosition:index*xcolW,进行一个位移,
  • 简单来说,即每列内部都有6个面组成,每个面都以父级为目标进行 position、transform等设置,
  • 一张图,让你看懂全世界:—— 图五为完成输出

//——[正、上、左、右]
for(var i = 0;i<4;i++){let dividingLine = i<2;let span = document.createElement('span');span.className = `${dividingLine?'bg-img':'pure-color'} i${i}`;span.style.width = `${dividingLine? this.colW:this.cubeH}px`;span.style.height = this.cubeH+'px';if(dividingLine){span.style.backgroundPosition = `-${index*this.colW}px 0`;};//首席填坑官∙苏南的专栏 交流:912594095、公众号:honeyBadger8iDivCol.appendChild(span);
};
单列的布局结构 :
  • colNode方法中的 zIndex,需要注意一下,层级的调整,可以覆盖立体透视造成的影响,
  • 单列的html布局及重点样式,


 /*四个面的样式*/...省略N行
.div-col span.i1{/*top*/transform-origin:top;transform:translateZ(-360px) rotateX(90deg);
}
.div-col span.i2{/*left*/transform-origin: left;transform: rotateY(90deg);
}
.div-col span.i3{/*right*/transform-origin:left;transform:translateX(25px) rotateY(90deg);
}

切换 :
  • 布局完成后,我们只需要操控系列[div-col]来进行旋转即可,
  • 下图为 transform-origin:50% 50% -180px,即设置旋转的中心点:

  • 鼠标经过都实现了,上下页切换还远吗?
  • 之前创建结构的时候,我们已知div的列数,
  • 为了更好的装B,我们在旋转的时候,给每列都要添加一定延时setTimeout,得以达到缓冲的视差,
  • 然后requestAnimationFrame就该它出场了,setInterval已经成为过去式,
  • 同时旋转前,还要设置下一页,要显示的图片,
  • 当然记得旋转完成,后要重置角度哦。



...省略N行
swiperAnimate(){const _requestAnimationFrame_ = window.requestAnimationFrame||window.WebkitRequestAnimationFrame;const iDivCol = this.swiperEle.querySelectorAll(".div-col");for(var i=0;i<iDivCol.length;i++){//首席填坑官∙苏南的专栏 交流:912594095、公众号:honeyBadger8//让动画更逼真,给个过渡,当然也可以调整,requestAnimationFrame每次递增的值,iDivCol[i].style.WebkitTransition=`.8s -webkit-transform ease`;iDivCol[i].style.WebkitTransformOrigin=iDivCol[i].style.transformOrigin = "50% 50% -180px";this.animateMove(iDivCol[i],i,_requestAnimationFrame_);}
}
animateMove(Col,index,animationFrame){let ColNum =0;let spanSurface =  Col.querySelectorAll("span");//即将旋转到的面,展示的图片spanSurface[1].style.backgroundImage="url(./2.jpg)";setTimeout(()=>{//每列进行一个延时,以达到缓冲效果this.rotate(Col,0,spanSurface,animationFrame);},index*this.delayMilli);
}
...省略N行
上下翻页 :
  • 上面基本已实现了旋转的效果,再加一些修饰,
  • 上下点击切换的功能,注意的地方在于,防止重复点击,当前旋转中时不能点:
pageDown(){if(this.status){console.log("下翻,不能点击")return ;};this.status = 1;this.pageNum = this.pageNum>=this.imageList.length ? 1 :++this.pageNum;this.swiperAnimate();//首席填坑官∙苏南的专栏 交流:912594095、公众号:honeyBadger8
}

预加载 :
  • 因轮播图图片较多,且此示例的图片每次只加载了两张,故要对图片进行一个预加载,
  • 以及图片加载出错后的过滤,避免影响后续效果的呈现:
preloadingImage(){this.imageList.map((k,v)=>{let imgNode = new Image();imgNode.onerror=err=>{this.imageList.splice(v,1);}imgNode.src = k;//首席填坑官∙苏南的专栏 交流:912594095、公众号:honeyBadger8});
}

总结:

  一个效果实现的方式有很多种,比如我们可以设置6个面,每设置一次,都是展示一张图,这样就不用每次旋转完后又去重置图片、角度等问题,包括requestAnimationFrame动画切换的过渡过程,也应该有更好的方式,新手上路中,欢迎各位大佬指点。以上就是今天为您带来的分享,你GET到了吗?如果觉得不错,记得给个赞哦!

  • 文章源码获取-> blog-resource ?
  • 想直接在线预览 ?

更多文章:

easy-mock 最好的备胎没有之一
immutability因React官方出镜之使用总结分享!
面试踩过的坑,都在这里了~
你应该做的前端性能优化之总结大全!
如何给localStorage设置一个过期时间?
动画一点点 - 如何用CSS3画出懂你的3D魔方?

作者:苏南 - 首席填坑官
来源:@IT·平头哥联盟
链接:http://susouth.com/
交流:912594095、公众号:honeyBadger8
本文原创,著作权归作者所有。商业转载请联系@IT·平头哥联盟获得授权,非商业转载请注明原链接及出处。

转载于:https://www.cnblogs.com/susouth/p/10040888.html

玩转3D Swiper美女性感秀之思路分析总结相关推荐

  1. 老司机双十一厚礼之玩转 3D Swiper 性感秀之思路分析总结

    前言 继一次的3D魔方之后,这次带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦!想直接在线预览 双十一快乐,这里是@IT·平头哥联盟,我是首席填坑官∙苏南,用心 ...

  2. 免费送书啦!玩转3D视界,这本书带你感知立体的世界

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 计算机视觉作为人工智能的一个分支,侧重的是视觉方面的研究,通过相机获取图像,然后利用计算机对采集 ...

  3. echarts 3d地图_独占进博会800m2展厅!3D炫酷光影秀带你邂逅金山往事..._政务_澎湃新闻...

    流水悠悠,青砖黛瓦 记忆中的江南,是一种天然的古典韵味,好像只要身临其境,就能梦回江南的曲水流觞.炊烟袅袅...... 金 山 如 画 醉 美 枫 泾 如何把来参加进博会的观众直接带至枫泾? 答案一共 ...

  4. 迎接互联网的明天--玩转3D Web

    迎接互联网的明天--玩转3D Web基本信息 作者: 邹静 出版社:电子工业出版社 ISBN:9787121133084 上架时间:2011-6-9 出版日期:2011 年6月 http://prod ...

  5. 《玩转3D打印》——第1章3D打印那些事儿

    本节书摘来自异步社区<玩转3D打印>一书中的第1章3D打印那些事儿,作者 王春玉 , 傅浩 , 于泓阳,更多章节内容可以访问云栖社区"异步社区"公众号查看 1 3D打印 ...

  6. 用Blender设计插画?3D艺术家又开始秀啦!

    还记得入围第92届奥斯卡金像奖最佳动画长片的电影<我失去了身体>(用Blender三渲二打造一只"断手"的旅行,真香!),虽然看起来像2D动画,但其实是使用Blende ...

  7. 相芯科技助力华为Mate20Pro玩转3D Live Emoji

    杭州2018年10月17日电 /美通社/ -- 北京时间10月16日晚9点,华为Mate 20系列发布会在英国伦敦召开,期间正式发布了华为Mate 20.Mate 20 Pro.Mate 20 X以及 ...

  8. 玩好3D打印机从了解切片软件开始

    每个人想要从身边的3D打印机中最快速的获得最佳打印效果,除了设计优化.3D打印机和打印材料之外,还有一个更重要的环节就是切片软件,它对打印结果起着重要作用,我们可以把切片软件理解为从数字模型到实体模型 ...

  9. 《玩转3D打印》——2.1节3D建模软件

    本节书摘来自异步社区<玩转3D打印>一书中的第2章,第2.1节3D建模软件,作者 王春玉 , 傅浩 , 于泓阳,更多章节内容可以访问云栖社区"异步社区"公众号查看 2. ...

最新文章

  1. node + express + mysql 搭建后台
  2. IAR在线调试时用DEBUG打印调试信息
  3. 从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力
  4. python 将指定路径(目录)下的图片或文本文件按给定序号重新排序,并批量重命名 (yolo、tensorflow数据集批量处理)
  5. [BZOJ1799][Ahoi2009]self 同类分布(数位dp)
  6. django 学习 (三) 模板变量
  7. 这个城市的外卖小哥注意了!必须穿上特定马甲 违反交规逃逸将被追罚
  8. JavaScript内置对象导读(1)
  9. 给构造函数(constructor)创建对象(object)
  10. NoSQL数据库原理与应用
  11. ifv播放器android 版,ifv格式播放器
  12. windows10彻底关闭自动更新
  13. 康诺特酒吧摘得2021全球50家最佳酒吧桂冠;华住与京能集团达成战略合作 | 全球旅报...
  14. 希望从今往后,是日积月累的努力,而不是由于心血来潮而半途而废
  15. 第4届华为编程大赛决赛试题解答(棋盘覆盖)
  16. oss客户端工具_云享会 | 沃云公有云重点产品推荐:文件存储NASamp;对象存储OSS...
  17. C语言:逗号表达式(辨析)
  18. 解决:Uncaught (in promise) TypeError: Failed to fetch 的问题
  19. C语言标准化输入、输出字符
  20. E-PUCK机器人-开始

热门文章

  1. 推荐算法总结以及概要
  2. CST粒子工作室学习笔记———旋转操作
  3. 信息收集之nmap端口扫描
  4. 《数据结构》-第六章 图(习题)
  5. 开会迟到,代码不规范,新人程序员被疯狂吐槽
  6. 遍历HBase表中的数据(把hbase中存储的图片写到本地)
  7. c语言中的常见数据类型
  8. Vant rem适配
  9. React 服务端渲染 umi服务端渲染
  10. java调用c语言的动态库,hu-unix下面java调用c语言动态链接库.docx