动画版
效果图
html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="./css/reset.min.css">
<link rel="stylesheet" href="./css/index.css">
</head>
<body>
<div class="container" id="bannerBox">
<div class="wrapper">
<!-- <div class="slide"><img src="./images/banner01.png" alt=""></div>
<div class="slide"><img src="./images/banner02.jpg" alt=""></div>
<div class="slide"><img src="./images/banner03.png" alt=""></div>
<div class="slide"><img src="./images/banner01.png" alt=""></div> -->
</div>
<div class="pagination">
<!-- <span class="active" index="0"></span>
<span index="1"></span>
<span index="2"></span> -->
</div>
<div class="navigation prev"></div>
<div class="navigation next"></div>
</div>
<script src="js/lun.js"></script>
</body>
</html>
css代码
.container{
width:1000px;
/* border:1px solid red; */
margin:50px auto;
height:400px;
position:relative;
overflow:hidden;
}
.container .wrapper{
/* width:400%; */
display: flex;
height:400px;
position:absolute;
left:0;
top:0;
transition: left 0.3s;
}
.container .wrapper .slide,.container .wrapper img{
width:1000px;
height:400px;
float:left;
}
.pagination{
padding:5px 5px;
background-color: rgba(255,255,255,0.5);
border-radius:15px;
position: absolute;
bottom:30px;
left:50%;
transform: translateX(-50%);
}
.pagination span{
display: inline-block;
padding:5px;
margin:0px 8px;
border-radius: 50%;
background-color: #000000;
}
.pagination span.active{
background-color: chocolate;
}
.navigation{
height:79px;
width:39px;
background-color: rgba(245,245,245,0.7);
background: url(../images/btn.png) no-repeat;
position: absolute;
top:50%;
transform: translateY(-50%);
}
.prev{
left:0;
}
.next{
background-position:-39px 0px;
right:0;
}
js代码
(function(){
let wrapper=document.querySelector(".wrapper");
let bannerBox=document.getElementById("bannerBox");
let count=4;//图片的个数
let timer=null;//定时器
let w=bannerBox.offsetWidth;//每次图片移动的宽度
let step=0;
let paginationlist=null;
let pagination=document.querySelector(".pagination");
function render(){
let data=[];
let xhr=new XMLHttpRequest;
xhr.open("GET","./data.json",false);
xhr.onreadystatechange=function(){
if(xhr.readyState===4&&xhr.status===200){
data=JSON.parse(xhr.responseText);
}
}
xhr.send(null);
console.log(data);
let stra="";
let strb="";
data.forEach((item,index)=>{
let {pic}=item;
stra+=`<div class="slide"><img src="${pic}" alt=""></div>`;
strb+=`<span class="${index==0?'active':''}" index="${index}"></span>`;
})
stra+=`<div class="slide"><img src="${data[0].pic}" alt=""></div>`;
wrapper.innerHTML=stra;
pagination.innerHTML=strb;
count=data.length+1;
paginationlist=document.querySelectorAll(".pagination span");
}
render();
//自动轮播
function autoPlay(){
step++;
if(step>count-1){
wrapper.style.transitionDuration="0s";
wrapper.style.left=`0px`;
step=1;
wrapper.offsetWidth;
}
wrapper.style.transitionDuration="0.3s";
wrapper.style.left=`-${step*w}px`;
paginationfocus();
}
//小圆点获取焦点
function paginationfocus(){
let temp=step;
if(temp===count-1){
temp=0;
}
paginationlist.forEach((item,index)=>{
if(index===temp){
item.className="active";
return;
}
item.className="";
})
}
//添加点击功能
bannerBox.onclick=function(e){
let tar=e.target;
let cName=tar.className;
let tagN=tar.tagName;
if(tagN==="SPAN"){
//console.log("小圆点");
let num=+tar.getAttribute("index");
//if(step===num||(step===count-1&&num===0)) return;
step=num;
wrapper.style.left=`-${num*w}px`;
paginationfocus()
return;
}
if(tagN==="DIV"&&cName.includes("navigation")){
if(cName.includes("prev")){//左
step--;
if(step<0){
wrapper.style.transitionDuration="0s";
wrapper.style.left=`-${(count-1)*w}px`;
step=count-2;
wrapper.offsetWidth;
}
wrapper.style.transitionDuration="0.3s";
wrapper.style.left=`-${step*w}px`;
paginationfocus();
}else{
autoPlay();
}
}
}
//自动轮播启动
timer=setInterval(autoPlay,1000);//启动定时器
bannerBox.onmouseenter=function(){
clearInterval(timer);
timer=null;
}
bannerBox.onmouseleave=function(){
timer=setInterval(autoPlay,1000);
}
})()
data.json代码
[{
"id": 1,
"pic": "images/banner01.png"
}, {
"id": 2,
"pic": "images/banner02.jpg"
}, {
"id": 3,
"pic": "images/banner03.png"
}, {
"id": 4,
"pic": "images/banner04.png"
}, {
"id": 5,
"pic": "images/banner05.png"
}]
渐隐渐显
效果图
html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="./css/reset.min.css">
<link rel="stylesheet" href="./css/inout.css">
</head>
<body>
<div class="container" id="bannerBox">
<div class="wrapper">
<!-- <div class="slide active"><img src="./images/banner01.png" alt=""></div>
<div class="slide"><img src="./images/banner02.jpg" alt=""></div>
<div class="slide"><img src="./images/banner03.png" alt=""></div>
<div class="slide"><img src="./images/banner01.png" alt=""></div> -->
</div>
<div class="pagination">
<!-- <span class="active" index="0"></span>
<span index="1"></span>
<span index="2"></span> -->
</div>
<div class="navigation prev"></div>
<div class="navigation next"></div>
</div>
<script src="./js/inout.js"></script>
</body>
</html>
css代码
.container{
width:1000px;
/* border:1px solid red; */
margin:50px auto;
height:400px;
position:relative;
overflow:hidden;
}
.container .wrapper{
width:100%;
height:400px;
}
.container .wrapper .slide,.container .wrapper img{
width:1000px;
height:400px;
}
.container .wrapper .slide{
position:absolute;
left:0;
top:0;
z-index:1;
opacity:0;
transition: all 0.3s;
}
.container .wrapper .slide.active{
opacity:1;
z-index:2;
}
.pagination{
padding:5px 5px;
background-color: rgba(255,255,255,0.5);
border-radius:15px;
position: absolute;
bottom:30px;
left:50%;
transform: translateX(-50%);
z-index:3;
}
.pagination span{
display: inline-block;
padding:5px;
margin:0px 8px;
border-radius: 50%;
background-color: #000000;
transition: background-color 0.3s;
}
.pagination span.active{
background-color: chocolate;
}
.navigation{
height:79px;
width:39px;
background-color: rgba(245,245,245,0.7);
background: url(../images/btn.png) no-repeat;
position: absolute;
top:50%;
transform: translateY(-50%);
z-index:3;
}
.prev{
left:0;
}
.next{
background-position:-39px 0px;
right:0;
}
js代码
(function(){
let bannerBox=document.getElementById("bannerBox");
let wrapper=document.querySelector(".wrapper"),
pagination=document.querySelector(".pagination");
let slides=null,paginationlist=null;
let data=[];
let step=0;
let count=0;
let timer=null;
let getdata=function getdata(){
var xhr=new XMLHttpRequest;
xhr.open("GET","./data.json",false);
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
data=JSON.parse(xhr.responseText);
}
}
xhr.send(null);
}
let binding=function binding(){
let stra="",strb="";
data.forEach((item,index)=>{
stra+=`<div class="${index==0?'slide active':'slide'}"><img src="${item.pic}" alt=""></div>`;
strb+=`<span index="${index}" class="${index==0?'active':''}"></span>`;
})
wrapper.innerHTML=stra;
pagination.innerHTML=strb;
count=data.length;
paginationlist=document.querySelectorAll(".pagination span");
slides=document.querySelectorAll(".wrapper .slide");
}
//自动轮播
let autoplay=function autoplay(){
step++;
if(step>count-1){
step=0;
}
toggleimg(step);
}
//切换图片 和 小圆点
let toggleimg=function toggleimg(step){
slides.forEach((item,index)=>{
if(index==step){
item.className="slide active";
}else{
item.className="slide";
}
})
paginationfocus(step);
}
//分页器切换效果
let paginationfocus=function paginationfocus(step){
paginationlist.forEach((item,index)=>{
if(index===step){
item.className="active";
return;
}
item.className="";
})
}
bannerBox.onmouseenter=()=>{
clearInterval(timer);
timer=null;
}
bannerBox.onmouseleave=()=>timer=setInterval(autoplay,3000);
//左右按钮点击 和 分页器点击
bannerBox.onclick=function(e){
let target=e.target;
let TagName=target.tagName;
let cName=target.className;
if(TagName==="SPAN"){//分页器
let index=+target.getAttribute("index");
toggleimg(index);
return;
}
if(TagName==="DIV"&&cName.includes("navigation")){
if(cName.includes("prev")){//左按钮
step--;
if(step<0){
step=count-1;
}
toggleimg(step);
}else{
//右按钮,跟自动轮播一样
autoplay()
}
}
}
getdata();
binding();
timer=setInterval(autoplay,3000);
})()
3D
效果图
html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="css/reset.min.css">
<link rel="stylesheet" href="css/3d.css">
</head>
<body>
<div class="header">
<div class="container" id="container">
<div class="wrapper">
<!-- <div class="slide active">
<img src="./images/01.jpg" alt="">
<div class="mark"></div>
<div class="desc">
<p>蒙奇·D·路飞</p>
<p>身份:草帽海贼团船长</p>
<p>梦想:找到ONE PIECE,并成为海贼王</p>
</div>
</div> -->
</div>
<div class="navigation prev"></div>
<div class="navigation next"></div>
</div>
</div>
<script src="./js/3d.js"></script>
</body>
</html>
css代码
.header{
width:100%;
height:380px;
background: url(../images/bg.jpg) no-repeat;
background-size: cover;
border-top: 1px solid transparent;
box-sizing: border-box;
}
.container{
width:1100px;
height:300px;
margin:40px auto;
box-sizing: border-box;
position: relative;
}
.container .wrapper{
height:100%;
position: relative;
}
.container .wrapper .slide{
position: absolute;
left:50%;
top:50%;
transform: translate(-50%,-50%);
z-index:0;
height:100%;
width:25%;
overflow: hidden;
transition: all 0.3s;
}
.container .wrapper .slide img{
height:100%;
width:100%;
}
.container .wrapper .slide .mark{
background: rgba(0, 0, 0, .75);
width:100%;
height:100%;
position: absolute;
left:0;
bottom:0;
padding:15px;
padding:10px;
box-sizing: border-box;
}
.container .wrapper .slide.active .mark,.container .wrapper .slide:hover .mark{
display: none;
}
.container .wrapper .slide .desc{
height:40%;
width:100%;
position: absolute;
left:0;
bottom:0;
background: rgba(0, 0, 0, .75);
box-sizing: border-box;
transform: translateY(100%);
transition: transform 0.3s;
overflow: hidden;
}
.container .wrapper .slide.active:hover .desc{
transform: translateY(0);
}
.container .wrapper .slide .desc p{
line-height: 2;
color: #FFF;
font-size: 12px;
padding-left:10px;
padding-top:10px;
box-sizing: border-box;
}
.navigation{
height:79px;
width:39px;
background: url(../images/btn.png) no-repeat;
position: absolute;
top:50%;
transform: translateY(-50%);
}
.prev{
left:0;
}
.next{
background-position:-39px 0px;
right:0;
}
js代码
(function(){
let container = document.querySelector('#container');
let wrapper=container.querySelector(".container .wrapper");
let slides=null;
let data=[];
let navPrev = container.querySelector('.navigation.prev'),
navNext = container.querySelector('.navigation.next');
let step=0;//默认刚开始显示第一张
let count=0;// 默认图片数量为0
let timer=null;
//获取数据
let getdata=function getdata(){
var xhr=new XMLHttpRequest;
xhr.open("GET","./3d/data.json",false);
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
data=JSON.parse(xhr.responseText);
}
}
xhr.send(null);
}
//页面初始化加载
let binding=function binding(flag){
//1.刚开始判断一下图片的数据是否能超过5张,超不过就给补充
if (data.length === 0) return;
while (data.length < 5) {
let diff = 5 - data.length,
clone = data.slice(0, diff);
data = data.concat(clone);
}
count = data.length;
//2. 先给data数据做一下处理,
//给每条数据增添一个 className, z-index translate scale
let temp1=step-2;
let temp2=step-1;
let temp3=step;//正中间这一项
let temp4=step+1;
let temp5=step+2;
//假设 step 为 0
if(temp1<0){temp1=count+temp1;}
if(temp2<0){temp2=count+temp2;}
//假设 step 为最大值
if(temp4>count-1){temp4=temp4 - count;}
if(temp5>count-1){temp5=temp5 - count;}
data=data.map((item,index)=>{
let className="slide";
let zindex=0;
let transform="translate(-50%,-50%) scale(0.55)";
switch (index){
case temp1:
zindex=1;
transform="translate(-195%,-50%) scale(0.7)";
break;
case temp2:
zindex=2;
transform="translate(-130%,-50%) scale(0.85)";
break;
case temp3:
className="slide active";
zindex=3;
transform="translate(-50%,-50%) scale(1)";
break;
case temp4:
zindex=2;
transform="translate(30%,-50%) scale(0.85)";
break;
case temp5:
zindex=1;
transform = 'translate(95%,-50%) scale(0.7)';
break;
}
item.className=className;
item.sty=`z-index:${zindex};transform:${transform};`;
return item;
})
//5.自动轮播,如果不是第一次,只需要修改样式就是,不需要重新渲染
if(!flag){
data.forEach((item,index)=>{
let {className,sty}=item;
slides[index].className=className;
slides[index].style.cssText=sty;
})
return;
}
//3. 数据处理好后,将数据循环到页面上
let str="";
data.forEach((item)=>{
let {
className,sty,pic,descript
}=item;
str+=`<div class="${className}" style="${sty}">
<img src="${pic}" alt="">
<div class="mark"></div>
<div class="desc">
<p>${descript.name}</p>
<p>${descript.identity}</p>
<p>${descript.dream}</p>
</div>
</div> `;
})
wrapper.innerHTML=str;
//4.获取slides
slides=wrapper.querySelectorAll(".slide");
}
//自动轮播
let autoplay=function autoplay(){
step++;
if(step>=count){
step=0;
}
binding();
}
//鼠标滑过自动轮播
container.addEventListener("mouseenter",()=>{
clearInterval(timer);
timer=null;
})
container.addEventListener("mouseleave",()=>{
timer=setInterval(autoplay,1000)
})
//左右点击按钮切换图片
container.addEventListener("click",function(e){
let target=e.target;
let tagName=target.tagName;
let classN=target.className;
if(tagName=="DIV"&&classN.includes("navigation")){
if(classN.includes("prev")){//左
step--;
if(step<0){
step=count-1;
}
binding();
}else{//右
autoplay()
}
}
})
getdata();
binding(true);
timer=setInterval(autoplay,1000)
})()
data.json代码
[{
"id": 1,
"pic": "images/01.jpg",
"descript": {
"name": "蒙奇·D·路飞",
"identity": "草帽海贼团船长",
"dream": "找到ONE PIECE,并成为海贼王"
}
}, {
"id": 2,
"pic": "images/02.jpg",
"descript": {
"name": "罗罗诺亚·索隆",
"identity": "草帽海贼团战斗员",
"dream": "世界第一大剑豪"
}
}, {
"id": 3,
"pic": "images/03.jpg",
"descript": {
"name": "“小贼猫”娜美",
"identity": "草帽海贼团航海士",
"dream": "绘制出自己的世界地图、绘制全世界的航海图"
}
}, {
"id": 4,
"pic": "images/04.jpg",
"descript": {
"name": "“GOD”▪乌索普",
"identity": "草帽海贼团狙击手",
"dream": "成为勇敢的海上战士"
}
}, {
"id": 5,
"pic": "images/05.jpg",
"descript": {
"name": "“黑足”山治",
"identity": "草帽海贼团厨师",
"dream": "寻找传说中的奇迹之海-ALL BLUE"
}
}, {
"id": 6,
"pic": "images/06.jpg",
"descript": {
"name": "托尼托尼·乔巴",
"identity": "草帽海贼团船医",
"dream": "成为万能药"
}
}, {
"id": 7,
"pic": "images/07.jpg",
"descript": {
"name": "“改造人”弗兰奇",
"identity": "草帽海贼团船工",
"dream": "制造出梦想之船"
}
}, {
"id": 8,
"pic": "images/08.jpg",
"descript": {
"name": "“鼻歌”&“灵魂之王”布鲁克",
"identity": "草帽海贼团音乐家",
"dream": "环绕世界一周到伟大航道双子岬跟伙伴鲸鱼“拉布”重逢"
}
}, {
"id": 9,
"pic": "images/09.jpg",
"descript": {
"name": "“恶魔之子”妮可·罗宾",
"identity": "草帽海贼团考古学家",
"dream": "在历史正文碑的指引下,到达伟大航道的尽头“拉夫德鲁”"
}
}]
reset.min.css
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,button,input,textarea,th,td{margin:0;padding:0}body{font-style:normal;font-family:"\5FAE\8F6F\96C5\9ED1",Helvetica,sans-serif}small{font-size:12px}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4,h5,h6{font-size:100%}ul,ol{list-style:none}a{text-decoration:none;background-color:transparent}a:hover,a:active{outline-width:0;text-decoration:none}table{border-collapse:collapse;border-spacing:0}hr{border:0;height:1px}img{border-style:none}img:not([src]){display:none}svg:not(:root){overflow:hidden}html{-webkit-touch-callout:none;-webkit-text-size-adjust:100%}input,textarea,button,a{-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]),video:not([controls]){display:none;height:0}progress{vertical-align:baseline}mark{background-color:#ff0;color:#000}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}button,input,select,textarea{font-size:100%;outline:0}button,input{overflow:visible}button,select{text-transform:none}textarea{overflow:auto}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.clearfix:after{display:block;height:0;content:"";clear:both}
images文件
链接:pan.baidu.com/s/1FQb0zD4W… 提取码:3mq6