原文链接:http://www.imooc.com/article/7393

编辑HTML代码:

<div id="wrap"><!--图片展示区-->
<div id="inner" class="clear"><!--所有图片并排的块-->
<a href="#"><img src="img/sw1.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw2.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw3.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw4.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw5.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw6.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw7.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw8.png" alt="图片已失效"/></a>
<a href="#"><img src="img/sw1.png" alt="图片已失效"/></a>
</div>
<div id="pagination" class="pagination"><!--页面数字按钮区域-->
<span class="selected">1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
</div>
<div id="left" class="arrow">
<<<
</div>
<div id="right" class="arrow">
>>>
</div>
</div><!--wrap end-->

定义样式:

<style type="text/css">
*{
margin:;
padding:;
border:;
}
#wrap{/*整个轮播区域只会显示一张图片大小的空间,其余图片隐藏*/
width: 720px;/*图片宽度*/
height: 322px;/*图片高度*/
margin: 0 auto;/*水平居中*/
position: relative;
background: lightpink;
overflow: hidden;
}
.clear{/*兼容IE*/
zoom:;
}
.clear:after{
visibility: none;
content: "";
display: block;
clear: both;
height:;/*why?*/
}
#inner{
width: 1000%;/*why?*/
height: 100%;
position: absolute;
left:;
top:;
}
#inner img{
width: 10%;
float: left;
}
.pagination{/*页码的样式和摆放*/
width: 100%;
position: absolute;
bottom: 10px;
text-align: center;
}
.pagination span{
padding: 5px 8px;
background: green;
color: aliceblue;
border-radius: 50%;/*设置数字按钮边框圆角*/
cursor: pointer;
}
.pagination .selected{/*第一个页码的数字按钮样式*/
background: blue;
color: chartreuse;
}
.arrow{
position: absolute;
top:;
width: 35px;
height: 322px;/*图片高度*/
line-height: 322px;
text-align: center;
color: black;
cursor: pointer;
}
#right{
right:;
}
.arrow:hover{
background: rgba(0,0,0,0.5);
}
</style>

Javascript代码:

<script type="text/javascript">
var wrap = document.getElementById("wrap");//获取要轮播的DIV
var inner = document.getElementById("inner");//获取轮播图并排的块
//获取pagination的子字节数字按钮
var spanList = document.getElementById("pagination").getElementsByTagName("span");
var left = document.getElementById("left");//获取往左箭头
var right = document.getElementById("right");//获取往右箭头 var clickFlag = true;//防止左右按钮的连续操作
var motive;//用来设置自动往左滑动的计时器
var index = 0;//记录每次滑动图片的下角标
var Distance = wrap.offsetWidth;//获取展示区的宽度(图片宽度)
function AutoGo(){//定义图片滑动的函数
var start = inner.offsetLeft;//获取移动块当前left的坐标
var end = index * Distance * (-1);//获取移动块结束后的坐标(下角标*图片宽度*每次向左移动的一个宽度)
var change = end - start;//偏移量(x轴结束后的坐标减去当前left的坐标等于往左偏移的像素数)
var motiver;//给图片添加轮播效果的间隔型定时器
var miniT = 0;
var maxT = 30;//最长时间,每30毫秒让块往左移动
clear();//先将按钮状态清除,再让对应的按钮改变状态
if(index == spanList.length){//if语句判断下角标是否等同于数字按钮的长度
spanList[0].className = "selected";//className返回元素的class属性,子节点下角标为0时返回selected
}else{
spanList[index].className = "selected";
}
clearInterval(motiver);//在开启定时器之前先将之前的清除
motiver = setInterval(function(){
miniT++;
if(miniT >= maxT){
clearInterval(motiver);//当图片到达终点时清除间隔型定时器
clickFlag = true;//当图片到达终点时才能点击方向按钮切换图片
}
//每隔多少毫秒(对应下列括号内的数值)往左偏移 = 偏移量/最长时间*最短时间 + X轴往左滑动的像素数 inner.style.left = change / maxT * miniT + start + "px";
//如果满足下角标等同于子节点长度,以及最短时间大于等于最长时间的条件时,
if(index == spanList.length && miniT >= maxT){
inner.style.left = 0;
//当图片到达最后一张时让它瞬间切换回第一张,由于都是用的都是第一张图片所以不会影响效果
index = 0;
}
},20);
}
//定义图片往右滑动的函数
function forward(){
index++;
if(index > spanList.length){//当图片下角标到达最后一张时记录滑动图片的下角标为0
index = 0;
}
AutoGo();
}
//定义图片往左滑动函数
function backward(){
index--;
//当图片下角标到达第一张时,让它返回到倒数第二张,left的值要变为最后一张时才不会影响效果
if(index < 0){
index = spanList.length - 1;
inner.style.left = (index + 1) * Distance * (-1) + "px";
}
AutoGo();
}
//开启图片自动向右滑动的计时器,间隔多少毫秒切换一次图片,即一张图片停留时间为多少毫秒
motive = setInterval(forward,2000);
//设置鼠标悬停时清除定时器,轮播暂停
wrap.onmouseover = function(){
clearInterval(motive);
}
wrap.onmouseout = function(){
motive = setInterval(forward,2000);
}
//遍历每个数字按钮让其切换到对应的图片
for(var i=0;i<spanList.length;i++){
spanList[i].onclick=function(){
//innerText用来定义数字按钮输出的文本
index = this.innerText - 1;//图片点击后下角标可以返回对应的图片,例如第4张是[3] = this.innerText -1;
AutoGo();
}
}
left.onclick=function(){
if(clickFlag){
backward();
}
clickFlag = false;
}
right.onclick=function(){
if(clickFlag){
forward();
}
clickFlag = false;
}
//清除所有页面按钮状态颜色,只有当图片轮播时才能改变对应的按钮效果
function clear(){
for(var i=0;i < spanList.length;i++){
spanList[i].className = "";
}
}
</script>

Javascript图片轮播的更多相关文章

  1. JavaScript图片轮播,举一反三

    图片轮播,在一些购物网站上运用的不胜枚举,下面简单介绍一下图片轮播的实现. 如图 <!doctype html> <html lang="en"> < ...

  2. JavaScript图片轮播器

    先贴上html的代码 <div class="ImgDiv"> <div class="Imgs" id="imgScroll&qu ...

  3. JavaScript 图片轮播入门

    轮播要求:一个在页面居中的矩形框,图片依次从矩形框中经过 当图片完整占满矩形框时 停留一小段时间再向左边移动经过矩形框的图片自动跑到右边最后一个图的后面.核心原理:在一个for循环中利用offsetl ...

  4. 图片轮播jQuery

          <script type="text/javascript">         //图片轮播         var bannerIndex = 0; ba ...

  5. 全面解析Bootstrap图片轮播效果

    http://www.jb51.net/article/75806.htm 一 . 结构分析 一个轮播图片主要包括三个部分: ☑ 轮播的图片 ☑ 轮播图片的计数器 ☑ 轮播图片的控制器 第一步:设计轮 ...

  6. 原生Js_使用setInterval() 方法实现图片轮播功能

    用javascript图片轮播功能 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. 纯javaScript、jQuery实现个性化图片轮播

    纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...

  8. JavaScript对象(document对象 图片轮播)

    图片轮播: 需要注意的HTML需要img标签,他和input标签一样,是非封闭的标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  9. javaScript 手写图片轮播

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. SRM 405(1-250pt, 1-500pt)

    DIV1 250pt 题意:以linux系统中文件系统的路径表示方法为背景,告诉你某文件的绝对路径和当前位置,求相对路径.具体看样例. 解法:模拟题,不多说.每次碰到STL的题自己的代码都会显得很sb ...

  2. G - Shuffle'm Up

    题目大意: 是一个洗牌游戏,首先给出两堆牌,s1,s2,先从s1上面拿一张牌再从s2上面拿一张牌依次往下可以洗好牌,然后把洗好的牌再分成两堆继续洗,直到这堆牌的顺序与给的顺序相同可以停止,当然如果洗不 ...

  3. Spring 3.x企业应用开发实战(9-1)----依赖注入

    Spring中的依赖注入方式:属性注入.构造函数注入和工厂方式注入. 1.属性注入 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象. 属性注入要求Bean提供一个默认的构造函数,在J ...

  4. PHP学习之[第04讲]PHP5.4 运算符、流程控制

    一.运算符: 1.算数运算符:+.-.*./.%.++.-- 2.字符串运算符: <?php $str="string php100"; echo $str."we ...

  5. C#实现文件数据库

    本文转载:http://www.cnblogs.com/gaochundong/archive/2013/04/24/csharp_file_database.html#commentform 本文为 ...

  6. ubuntu12.10中没有/etc/inittab文件探究

    1. 我们首先来看一下Linux系统开机启动过程: Ubuntu是Linux系统的衍生系统,其开机启动过程与上图相差不大,但是随着系统的不断发展,终究还是有不同的地方,下面,我们来了解一下Ubuntu ...

  7. iPad横竖屏代码适配

    你可能非常了解用不同的方式去适配不同尺寸的iPhone屏幕,在适配iPhone屏幕时你需要考虑的只是屏幕大小变化带来的UI元素间隔的变化,但是在iPad上主要针对的是横竖屏下完全不同的UI元素的布局, ...

  8. Android(java)学习笔记240:多媒体之图形颜色的变化

    1.相信大家都用过美图秀秀中如下的功能,调整颜色: 2. 下面通过案例说明Android中如何调色: 颜色矩阵 ColorMatrix cm = new ColorMatrix(); paint.se ...

  9. POJ 1985 Cow Marathon && POJ 1849 Two(树的直径)

    树的直径:树上的最长简单路径. 求解的方法是bfs或者dfs.先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一 ...

  10. MyBatis 学习总结(一)

    1.原生JDBC(Java database connectity)操作数据库(以MySQL数据为例)步骤 1.1 加载驱动 Class.forName("com.mysql.jdbc.Dr ...