原生js实现图片轮播效果
思路:设置父容器(一定宽度,一定高度,相对定位,子容器超出部分进行隐藏),子容器图片并排(浮动,绝对定位,每次点击进行相应的左或右偏移量)
1.html:
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Carousel figure</title>
5 <meta charset="utf-8">
6 <!-- 浏览器标签页显示图标 -->
7 <link rel="icon" type="image/x-icon" href="./images/1.jpg">
8 <link rel="stylesheet" type="text/css" href="1.css">
9 </head>
10 <body>
11 <!-- 构建container父容器 -->
12 <div class="container">
13 <!-- 图片部分,style部分设置便于js中改变偏移量,从而实现图片轮播-->
14 <div class="pic" style="left: 0px;">
15 <!-- 图片部分,建议均加上alt,利于seo -->
16 <img src="./images/1.jpg" alt="1">
17 <img src="./images/2.jpg" alt="2">
18 <img src="./images/3.jpg" alt="3">
19 <img src="./images/4.jpg" alt="4">
20 <img src="./images/5.jpg" alt="5">
21 <img src="./images/6.jpg" alt="6">
22 </div>
23
24 <!-- 箭头部分,实现下一张,上一张效果 -->
25 <a href="javascript:void(0)" class="arrow arrow_left"><</a>
26 <a href="javascript:void(0)" class="arrow arrow_right">></a>
27
28 <!-- 当前图片id显示 -->
29 <div class="point">
30 <span class="on">1</span>
31 <span>2</span>
32 <span>3</span>
33 <span>4</span>
34 <span>5</span>
35 <span>6</span>
36 </div>
37 </div>
38
39 <!-- html body部分加载完成,最后调用js,进行操作;否则无法有效操作 -->
40 <script type="text/javascript" src="1.js"></script>
41 </body>
42 </html>
1.css:
1 /* body部分清一下外边距与内边距,不建议*(可能影响效率),主流大网站均未采用*进行清边距 */
2 body{
3 margin: 0;
4 padding: 0;
5 }
6 a{
7 text-decoration: none;
8 color: green;
9 }
10 a:visited{
11 color: siver;
12 }
13 a:hover{
14 color: gold;
15 }
16
17 .container{
18 /* container采用相对定位relative,便于子容器进行绝对定位absolute */
19 position: relative;
20
21 /* 左右居中对齐 */
22 margin: 0 auto;
23
24 /* 每张图片的宽度高度均为320px, */
25 width: 320px;
26 height: 320px;
27 /* 图片超出部分隐藏 */
28 overflow: hidden;
29 /* border: 1px solid */
30 /* 设置阴影:水平阴影偏离0,垂直阴影偏移0,模糊距离10px,颜色 */
31 box-shadow: 0 0 10px orange;
32 }
33 .pic{
34 position: absolute;
35 /* 6张图片进行排放,故宽度为1920px */
36 width: 1920px;
37 height: 320px;
38 }
39 .pic img{
40 /* 设置左浮动,使6张图片排成一排 */
41 float: left;
42 width: 320px;
43 height: 320px;
44 }
45 .arrow{
46 display: block;
47
48 border-radius: 50%;
49 /* 采用字符实体,故设置字体使用font-size */
50 font-size: 60px;
51 默认隐藏箭头,
52 display: none;
53 }
54 /* 当悬浮在container区域显示箭头 */
55 .container:hover .arrow{
56 display: block;
57 }
58 /* 当悬浮在arrow区域显示箭头 */
59 .container .arrow:hover{
60 background-color: rgba(0, 0, 0, 0.2);
61 }
62 .arrow_left{
63 position: absolute;
64 left: 30px;
65 top: 40%;
66 text-align: center;
67 width: 80px;
68 height: 80px;
69 }
70 .arrow_right{
71 position: absolute;
72 right: 30px;
73 top: 40%;
74 text-align: center;
75 width: 80px;
76 height: 80px;
77 }
78 .point{
79 position: absolute;
80 margin: 280px auto 0 80px;
81 }
82 .point span{
83 display: inline-block;
84 width: 30px;
85 height: 30px;
86 border-radius: 50%;
87 background-color: orange;
88 text-align: center;
89 cursor: pointer;
90 }
91 .point span.on{
92 background-color: red;
93 }
94 .point span:active{
95 background-color: gold;
96 }
1.js:
1 // 获取pic组第一个
2 var pic = document.getElementsByClassName('pic')[0];
3 // 获取arrow_left
4 var arrow_left = document.getElementsByClassName('arrow_left')[0];
5 // 获取arrow_right
6 var arrow_right = document.getElementsByClassName('arrow_right')[0];
7 // 获取span组
8 var points=document.getElementsByTagName('span');
9 var index=0;
10
11 // 点击右箭头,下一张图片
12 arrow_right.onclick = function() {
13 next_pic();
14 }
15 // 点击左箭头,上一张图片
16 arrow_left.onclick = function() {
17 prev_pic();
18 }
19
20 // 函数实现下一张浏览效果
21 function next_pic() {
22 // 最后一张,下一张变为第一张(left值为0)
23 if (parseInt(pic.style.left) === -1600) {
24 pic.style.left = 0 + "px";
25 } else {
26 // 下一张
27 var pos = parseInt(pic.style.left) - 320;
28 pic.style.left = pos + 'px';
29 }
30 index++;
31 if(index>5){
32 index=0;
33 }
34 showPoint();
35 }
36
37 function prev_pic() {
38 if (parseInt(pic.style.left) === 0) {
39 pic.style.left = -1600 + "px";
40 } else {
41 var pos = parseInt(pic.style.left) + 320;
42 pic.style.left = pos + 'px';
43 }
44 index--;
45 if(index<0){
46 index=5;
47 }
48 showPoint();
49 }
50
51 var timer = null;
52
53 // 自动图片轮播,设置1s间隔
54 function autoPlay() {
55 // timer=setInterval(function(){
56 // next_pic();
57 // },1000);
58 timer = setInterval(next_pic, 1000);
59 }
60 autoPlay();
61
62 var container = document.getElementsByClassName('container')[0];
63 // 鼠标移动到container区域,暂停自动播放
64 container.onmouseenter = function() {
65 clearInterval(timer);
66 }
67 // 鼠标离开container区域,自动播放
68 container.onmouseleave = function() {
69 autoPlay();
70 }
71
72 // 实现点击相应的小按钮图片跳转到相应图片功能
73 for (var i = 0; i < points.length; i++) {
74 (function(i){
75 points[i].onclick=function (){
76 //0~0,1~-320...5~-1600
77 pic.style.left=-320*i +"px";
78 };
79 index=i;
80 //无法点击point,使其变色
81 showPoint();
82 }
83 )(i);
84 }
85
86 // 实现相应图片对应相应小按钮功能
87 function showPoint(){
88 for(var i=0;i<points.length;i++){
89 points[i].className="";
90 }
91 points[index].className="on";
92 }
当时光不再,莫空留遗恨!