媒介
继一次的3D魔方以后,此次带你一同玩转性感玉人秀,一般套路,请先一堵为快,有兴致继承,没兴致也能够看看玉人养眼哦🤪!想直接在线预览 👈
列位大佬晨安,这里是
@IT·平头哥同盟,我是
首席填坑官∙苏南,专心分享 做有温度的攻城狮。民众号:
honeyBadger8
,群:912594095
回忆:
看过上次的3D魔方
的同砚关于本次的剖析会有肯定的协助,固然假如大佬您自身就对css3
就已玩的很666了,那末关于下文的剖析就请饰演先生
的角色吧,小弟若有不足之处,迎接指正。
剖析:
建立列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`;
};
iDivCol.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++){
//让动画更传神,给个过渡,固然也能够调解,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();
}
预加载 :
- 因轮播图图片较多,且此示例的图片每次只加载了两张,故要对图片举行一个预加载,
- 以及图片加载失足后的过滤,防止影响后续结果的显现:
preloadingImage(){
this.imageList.map((k,v)=>{
let imgNode = new Image();
imgNode.onerror=err=>{
this.imageList.splice(v,1);
}
imgNode.src = k;
});
}
总结:
一个结果完成的体式格局有很多种,比方我们能够设置6个面,每设置一次,都是展现一张图,如许就不必每次扭转完后又去重置图片、角度等题目,包含requestAnimationFrame
动画切换的过渡历程,也应当有更好的体式格局,新手上路中,迎接列位大佬指导。以上就是本日为您带来的分享,你GET到了吗?假如以为不错,记得给个赞哦,想第一时候取得最新分享,迎接扫码关注我的个人民众号
:honeyBadger8,👇!
更多文章:
怎样用CSS3画出懂你的3D魔方?
SVG Sprites Icon的运用技能
immutability因React官方出镜之运用总结分享!
小顺序项目之又一填坑小记
做完小顺序项目、老板给我加了6k薪资~
口试踩过的坑,都在这里了~
你应当做的前端机能优化之总结大全!
怎样给localStorage设置一个逾期时候?
手把手教你怎样绘制一辆会跑车
作者:苏南 –
首席填坑官泉源:@IT·平头哥同盟
链接:https://blog.csdn.net/weixin_…
交换:912594095、民众号:
honeyBadger8
本文原创,著作权归作者一切。贸易转载请联络
@IT·平头哥同盟
取得受权,非贸易转载请说明原链接及出处。