用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 相关文章推荐
基于jQuery的history历史记录插件
Dec 11 Javascript
jQuery Validate验证框架经典大全
Sep 23 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
聊聊JavaScript如何实现继承及特点
Apr 07 Javascript
Node.js五大应用性能技巧小结(必须收藏)
Aug 09 Javascript
vue 不使用select实现下拉框功能(推荐)
May 17 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
AngularJS 事件发布机制
Aug 28 Javascript
js逆向解密之网络爬虫
May 30 Javascript
VUE 自定义组件模板的方法详解
Aug 30 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python jieba库用法及实例解析
2019/11/04 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
python pymysql库的常用操作
2020/10/16 Python
python爬取代理ip的示例
2020/12/18 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
nginx常用配置conf的示例代码详解
2022/03/21 Servers