以下说明数据,是指有4张图片的轮播图,分别切割成4张。

首先,做成单张切换的立体效果,即通过旋转,确定四张图片的位置,分别是一个立方体的上下前后的图片翻转移动角度。

		.box ul li:nth-child(1){
transform:rotateX(90deg) translateZ(190px);
}
.box ul li:nth-child(2){
transform:rotateX(-90deg) translateZ(190px);
}
.box ul li:nth-child(3){
transform:translateZ(190px);
}
.box ul li:nth-child(4){
transform:rotateX(180deg) translateZ(190px);
}

  

其次,切割轮播图的原理并不是将一个图片切割成4张,而是通过flex伸缩布局调整4张图片的位置,并调整图片位置,使得看起来像一张图片,通过设置过渡延迟来实现切割效果。

		.box {
width: 560px;
height: 380px;
border: 1px solid #000;
margin: 100px auto 0;
/* 让这个盒子成为一个伸缩容器
一旦盒子成为了伸缩容器,里面所有的子元素都会自动成为项目 项目默认呈现水平排列 一旦水平排列就会超出box,所以,flex-shrink:1自动就会收缩每一个UL,最终的结果就是一个UL占的box的1/4
*/
display: flex;
}
.box ul {
width: 560px;
height: 380px;
position: relative;
transform-style:preserve-3d;
transform:rotateX(0deg);
transition:transform 1s;
}
.box ul li {
/* 这里的LI设置成百分之百分宽高,为的是继承缩放后的UL的宽度 */
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
/* 在这里添加overflow:hidden */
overflow: hidden;
}
/* 给每一个UL添加延迟时间 */
.box ul:nth-child(2){
transition-delay: 0.2s;
}
.box ul:nth-child(3){
transition-delay: 0.4s;
}
.box ul:nth-child(4){
transition-delay: 0.6s;
}
/* 让每一个UL下面的图片都往左走 */
.box ul:nth-child(2) img{
margin-left: -140px;
}
.box ul:nth-child(3) img{
margin-left: -280px;
}
.box ul:nth-child(4) img{
margin-left: -420px;
}

  最后,通过JS的遍历来分别给每个按钮、每个ul注册事件,并通过添加 节流阀来控制轮播图的进度

<script type="text/javascript">
// 需求 :点击按钮让UL进行旋转 每一次点击累加一个90的角度 //(1)找对象
var box = document.querySelector('.box');
var _ul = box.querySelectorAll('ul');
var btns = document.querySelectorAll('button');
// (2)给右边的按钮绑定点击事件 每点击一次让Ul基于之前的角度在加上一个90
var num = 0; // 模拟信号量
// 设置一个flag变量
var flag = true;
// 整体绑定
for(var i = 0; i < btns.length; i++){ // 设置自定义属性
btns[i].setAttribute('data-index', i); btns[i].addEventListener('click',function(){
if(flag){
// 关门
flag = false;
// 判断当前点击的是哪一个对象
// 通过this去拿到当前的那个对象的data-index
var index = this.dataset['index'];
// 不能用全等 因为一个是字符串一个是数值型
if(index == 1){
num++;
}else if(index == 0){
num--;
}
console.log(num*90);
// _ul.style.transform = 'rotateX('+num*90+'deg)';
// 让所有的UL转起来
for(var i = 0; i < _ul.length; i++){
_ul[i].style.transform = 'rotateX('+num*90+'deg)';
}
}
})
}
// 当用户暴力点击的时候,会出现过渡来不及的BUG 解决方案:函数节流
// 当最后一个UL的过渡执行完毕之后重新开门
_ul[_ul.length - 1].addEventListener('transitionend',function(){
console.log(1);
// 开门
flag = true;
    })

CSS3+JS切割轮播图的更多相关文章

  1. css3实现3D切割轮播图案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 带锁的3D切割轮播图

    3D切割轮播图. 加入锁,限制点击太快次数 <!DOCTYPE html><html><head lang="en"> <meta cha ...

  3. js实现轮播图效果(附源码)--原生js的应用

    1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  4. 案例:3D切割轮播图

    一.3d转换 3D旋转套路:顺着轴的正方向看,顺时针旋转是负角度,逆时针旋转是正角度 二.代码 <!DOCTYPE html> <html lang="en"&g ...

  5. 原生js焦点轮播图

    原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...

  6. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

  7. js编写轮播图,广告弹框

    1.轮播图 js编写轮播图,需要用到setInterval(计时器):先给一个div,里面放轮播图的图片,将轮播图的图片明明为相同样式的:如:banner1.jpg,banner2.jpg,banne ...

  8. js实现轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 封装一个简单的原生js焦点轮播图插件

    轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

随机推荐

  1. HTML中强大的input标签属性

    用了许久的html,<input>这个标签是最常用的标签之一. <input type="">标签中type属性是必不可少的,以往我最常用的有 type=& ...

  2. M1/M2个人总结

    软件工程整个学期结束了,很开心学了这门课,在学到知识的同时也提高了自己的动手实践的能力,感觉自己在整个软件工程的各个环节中都能有所把握,可以将学到的知识运用到设计.实践更多的项目中去. M1阶段个人总 ...

  3. LINUX centos 忘记密码

    entos7采用的是grub2,和centos6.x进入单用户的方法不同.但是因为用的是真机环境无法截图,所以只是大概描述以下思路. init方法 1.centos7的grub2界面会有两个入口,正常 ...

  4. inside the C++ Object model总结

    一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中 ...

  5. 使用Mulesoft建立webservice, jax-ws方式, wsdl first

    先创建wsdl,然后生成class 1. 下载 HRData.xsd 和 HRDataService.wsdl http://yunpan.cn/Q4zBXC4fvC74xhttp://yunpan. ...

  6. Java集合运用技巧

    需要唯一吗? 需要:Set 需要制定顺序吗? 需要:TreeSet 不需要:HashSet 但是想要一个和存储一致的顺序(有序):LinkedHashSet 不需要:List 需要频繁增删吗? 需要: ...

  7. 如何在tomcat中如何部署java EE项目

    如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...

  8. sed用法

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  9. NSDateFormatter遇到无法转换的问题

    NSDateFormatter并不是万能的,并不是给出什么字符串都能转遍为NSDate类型,所转换的格式必须必须和你给出的格式想对应 比如说:NSString *dateStr = @"20 ...

  10. GridView获取CheckBox的值及所在列的ID

    //根据GridView的列数进行循环 ; i < GridView1.Rows.Count; i++) { //检查是否有ID为CheckBox1的CheckBox控件,如果有就赋值给Chec ...