用JS实现图片轮播效果代码(一)


Posted in Javascript onJune 26, 2016

一.实现原理

(1)将所有图片放在一个父容器div里面,通过display属性来设置图片的出现与隐藏;

(2)轮播图分为手动轮播和自动轮播;

手动轮播的重点是每次点击图片下方的小圆圈,获得它的索引号,并让与之对应索引号的图片显示,并且此时的小圆圈为高亮显示;
自动轮播:利用定时器setInterval(),来每隔一定的时间来播放一次图片。

(3)所有的基础知识:dom操作,定时器,事件运用。

二.轮播图页面布局:

<div id="content"> <!-- 总的父容器 -->
<div class="carousel-inner"> <!-- 包含图片的容器 -->
<div class="item "><img src="./img/lunbo1.jpg" alt="第一张图片"></div>
<div class="item"><img src="./img/lunbo2.jpg" alt="第二张图片"></div>
<div class="item"><img src="./img/lunbo3.jpg" alt="第三张图片"></div>
</div>
<!-- 图片下方的指示圆圈-->
<ul class="carousel-indicators">
<li id='pic1'>●</li>
<li id='pic2'>●</li>
<li id='pic3'>●</li>
</ul>
<!-- 图片左右方来回滚动图片的左右箭头-->
<a href="#" class="carousel-control prev"><span><</span></a>
<a href="#" class="carousel-control next"><span>></span></a>
</div>

三.轮播图的css样式:

#content{
width: 100%;
height:500px;
position: relative;
}
.carousel-inner{
position: relative;
width: 100%;
overflow: hidden; 
height:500px; 
}
.carousel-inner>.item>img{
display: block; 
line-height: 1; 
z-index: 1;
}
.carousel-indicators{
position: absolute;
bottom:10px;
left:45%;
z-index: 2;
list-style-type: none;
}
.carousel-indicators li{
display:inline-block;
padding: 0 15px;
font-size: 24px;
color:#999; 
cursor: pointer;
z-index: 2;
}
.active1{
font-size: 28px;
color:#fff;
}
.carousel-control{
position: absolute;
text-decoration:none;
color: #999;
font-weight: bold;
opacity: .5;
font-size: 40px;
z-index: 3;
}
.carousel-control:hover{
color:fff;
text-decoration: none;
opacity: .9;
outline: none;
font-size: 42px;
}
.prev{
top: 30%; 
left:20px; 
}
.next{
top:30%;
right: 20px;
}

四.轮播图的js实现代码:

window.onload = function(){
//轮播初始化
var lunbo = document.getElementById('content');
var imgs = lunbo.getElementsByTagName('img'); 
var uls = lunbo.getElementsByTagName('ul');
var lis = lunbo.getElementsByTagName('li');
//初始状态下,一个圆圈为高亮模式
lis[0].style.fontSize = '26px';
lis[0].style.color = '#fff';
//定义一个全局变量,用来进行自动轮播图片顺序的变化
var pic_index = 1;
//自动轮播.使用pic_time记录播放,可以随时使用clearInterval()清除掉。
var pic_time = setInterval(autobofang,3000);
//手动轮播
for(var i=0;i<lis.length;i++){ 
lis[i].addEventListener("mouseover",change,false);
}
function change(event){ 
var event=event||window.event;
var target=event.target||event.srcElement; 
var children = target.parentNode.children; 
for(var i=0;i<children.length;i++){
if(target == children[i]){ 
picChange(i); 
} 
}
} 
//图片切换函数
function picChange(i){ 
//让所有图片都不显示,所有圆圈都为普通样式 
for(var j=0;j<imgs.length;j++){
imgs[j].style.display = 'none'; lis[j].style.fontSize = '24px';
lis[j].style.color = '#999';
}
//让选中的索引的图片显示,对应的圆圈高亮 
imgs[i].style.display = 'block'; 
lis[i].style.fontSize = '26px';
lis[i].style.color = '#fff'; 
}
//自动播放的事件处理
function autobofang(){
if(pic_index >= lis.length){
pic_index = 0;
}
change1(pic_index);
pic_index++;
}
//自动播放的图片转化中的事件
function change1(index){ 
picChange(index);
//鼠标移入ul标签,自动播放图片暂停
uls[0].addEventListener("mouseover",pause,false);
//鼠标移出ul标签,自动播放图片继续
uls[0].addEventListener("mouseout",go,false);
}
//自动播放暂停函数
function pause(event){
var event=event||window.event;
var target=event.target||event.srcElement;
switch(target.id){
case "pic1":
clearInterval(pic_time); 
break;
case "pic2":
clearInterval(pic_time);
break;
case "pic3":
clearInterval(pic_time);
break;
}
}
//自动播放图片继续函数
function go(event){
var event=event||window.event;
var target=event.target||event.srcElement; 
switch(target.id){
case "pic1":
pic_index = 1; 
pic_time = setInterval(autobofang,3000);
break;
case "pic2":
pic_index = 2; 
pic_time = setInterval(autobofang,3000);
break;
case "pic3":
pic_index = 3; 
pic_time = setInterval(autobofang,3000); 
break;
}
}
}

五.效果图:

用JS实现图片轮播效果代码(一)

六.遇到的问题与不足

问题:当鼠标第一次移入ul标签时,自动轮播图片停止,鼠标移出,自动轮播继续,但是随着运行,轮播图片的变化速度越来越快,而且这时点击ul标签已经不起作用了。

问题原因:在后面停止轮播后再次轮播开始使用定时器的时候,没有给赋值给pic_time来记录,也就没有再次鼠标移到ul标签而清除定时器,因此导致再次点击ul标签不能暂停自动轮播播放,而且速度 越来越快。
不足:没有实现类似淘宝轮播图那样平滑过渡的无现滚动的效果,左右箭头的指示作用也没有完成。这些在后期会继续学习,继续来完善,来分享.

Javascript 相关文章推荐
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
May 14 Javascript
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
May 16 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
jQuery EasyUi 验证功能实例解析
Jan 06 Javascript
js单页hash路由原理与应用实战详解
Aug 14 Javascript
用vue构建多页面应用的示例代码
Sep 20 Javascript
小程序实现图片预览裁剪插件
Nov 22 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 #Javascript
jQuery滚动新闻实现代码
Jun 26 #Javascript
js css实现垂直方向自适应的三角提示菜单
Jun 26 #Javascript
JS中的进制转换以及作用
Jun 26 #Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 #Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 #Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 #Javascript
You might like
一个比较不错的PHP日历类分享
2014/11/18 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
python 图片验证码代码
2008/12/07 Python
Python 列表list使用介绍
2014/11/30 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python自定义线程类简单示例
2018/03/23 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python os模块常用方法和属性总结
2020/02/20 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
数据库基础的一些面试题
2012/02/25 面试题
大学社团活动策划书
2014/01/26 职场文书
触摸春天教学反思
2014/02/03 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
办理护照工作证明
2014/10/10 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
个人收入证明格式
2015/06/24 职场文书
中秋联欢会主持词
2015/07/04 职场文书
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers