CSS3+JS切割轮播图
以下说明数据,是指有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切割轮播图的更多相关文章
- css3实现3D切割轮播图案例
		
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
 - 带锁的3D切割轮播图
		
3D切割轮播图. 加入锁,限制点击太快次数 <!DOCTYPE html><html><head lang="en"> <meta cha ...
 - js实现轮播图效果(附源码)--原生js的应用
		
1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
 - 案例:3D切割轮播图
		
一.3d转换 3D旋转套路:顺着轴的正方向看,顺时针旋转是负角度,逆时针旋转是正角度 二.代码 <!DOCTYPE html> <html lang="en"&g ...
 - 原生js焦点轮播图
		
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
 - 原生js实现轮播图
		
原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...
 - js编写轮播图,广告弹框
		
1.轮播图 js编写轮播图,需要用到setInterval(计时器):先给一个div,里面放轮播图的图片,将轮播图的图片明明为相同样式的:如:banner1.jpg,banner2.jpg,banne ...
 - js实现轮播图
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 封装一个简单的原生js焦点轮播图插件
		
轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...
 
随机推荐
- Winform 支持高清屏(High DPI) 设置
			
http://www.cnblogs.com/weiym/p/3555068.htmlhttp://crsouza.com/2015/04/how-to-fix-blurry-windows-form ...
 - ASP.NET简单实现APP中用户个人头像上传和裁剪
			
最近有个微信项目的用户个人中心模块中,客户要求用户头像不仅仅只是上传图片,还需要能对图片进行裁剪.考虑到flash在IOS和Android上的兼容性问题,于是想着能从js这块入手,在网上发现了devo ...
 - HttpSession
			
(Cookie是用来设置浏览器保存数据的时间的: Session是只要浏览器不关闭,数据则会存在,一旦关闭浏览器数据即消失 ) 1. HttpSession概述 * HttpSession是由Java ...
 - 对vector<int>进行快速排序
			
#include <iostream>#include <string>#include <vector>using namespace std;void Quic ...
 - readelf与动态库
			
使用arm-linux-gcc编译的可执行文件可能会无法在开发板上执行,并提示:-/bin/sh xxx not found 解决办法: 在主机上使用readelf -d xxx 来查看该程序所需要的 ...
 - red hat enterprise 6安装tftp服务
			
1--->检查是否安装tftp rpm -qa tftp* 2--->安装tftp yum install -y tftp-server 3--->chkconfig --list| ...
 - app接口测试-bug分类
			
前段时间在测试一个项目,任务是测试app的API.总结下遇到的问题类型: 1 通过app提交数据,隐形数据有误.(主要通过验证数据库) 比如用户通过app输入工单提交.接口数据中,用户输入的信息都正确 ...
 - 【转】 shell 判断语句
			
转自:http://see.sl088.com/wiki/Shell_%E4%B8%AD%E6%8B%AC%E5%8F%B7 test 和 [] test -z string 判定字串是否為 0 ?若 ...
 - windows上传代码到github
			
上传代码到github上有很多种方法,在这里我介绍一种比较简单的一种.工具嘛,越简单越好用啊. 1.首先下载github在windows下的客户端 下载地址:https://desktop.githu ...
 - 为什么匿名内部类参数必须为final类型
			
1) 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自 ...