Javascript图片轮播
原文链接: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图片轮播的更多相关文章
- JavaScript图片轮播,举一反三
图片轮播,在一些购物网站上运用的不胜枚举,下面简单介绍一下图片轮播的实现. 如图 <!doctype html> <html lang="en"> < ...
- JavaScript图片轮播器
先贴上html的代码 <div class="ImgDiv"> <div class="Imgs" id="imgScroll&qu ...
- JavaScript 图片轮播入门
轮播要求:一个在页面居中的矩形框,图片依次从矩形框中经过 当图片完整占满矩形框时 停留一小段时间再向左边移动经过矩形框的图片自动跑到右边最后一个图的后面.核心原理:在一个for循环中利用offsetl ...
- 图片轮播jQuery
<script type="text/javascript"> //图片轮播 var bannerIndex = 0; ba ...
- 全面解析Bootstrap图片轮播效果
http://www.jb51.net/article/75806.htm 一 . 结构分析 一个轮播图片主要包括三个部分: ☑ 轮播的图片 ☑ 轮播图片的计数器 ☑ 轮播图片的控制器 第一步:设计轮 ...
- 原生Js_使用setInterval() 方法实现图片轮播功能
用javascript图片轮播功能 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 纯javaScript、jQuery实现个性化图片轮播
纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...
- JavaScript对象(document对象 图片轮播)
图片轮播: 需要注意的HTML需要img标签,他和input标签一样,是非封闭的标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- javaScript 手写图片轮播
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- mongo 多条件 查询
var query1 = Query<BaseManagerForCompanyModel>.EQ(q => q.sGuidBaseCompany, sGuidBaseCompany ...
- [Angular 2] Inject Service
TypeScript is used heavily as we build up our application, but TypeScript isn’t required. If you wan ...
- 谈论C++当然结果
C++编程课程的考试已经结束.这是第一次OJCBT.摸着石头过河,考试没有给学生理解的说法.现在尘埃落定.一些交代. 先说大的成就的治疗原则.事实上,有很多的纠结. 按理说,合格的太,无法挂.但实际情 ...
- Linux 内核的文件 Cache 管理机制介绍-ibm
https://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使 ...
- YYCache 源码分析(二)
本文分析YYMemoryCache实现原理: YYMemoryCache是内存缓存,所以存取速度非常快,主要用到两种数据结构的LRU淘汰算法 1.LRU Cache的容量是有限的,当Cache的空间都 ...
- Content Provider Basics ——Content Provider基础
A content provider manages access to a central repository of data. A provider is part of an Android ...
- ubuntu 配置android开发环境
本文的下载地址都是androiddevtools,下载地址:http://www.androiddevtools.cn/ 一.安装android sdk 解压文件,全部放到/opt/Java/andr ...
- group by、order by 先后顺序问题
今天遇到个小问题 本来是很基础的问题 应该说 基础知道掌握的不牢 好了不说 错误 语句 : select a.a1 from table a where order by a.a1 gro ...
- git 的记住用户名和密码和一些常用
git config --global core.autocrlf falsegit config --global color.ui truegit config --global credenti ...
- 安卓开机启动service后台运行
安卓开机启动service后台运行 Android开机启动时会发送一个广播android.intent.action.BOOT_COMPLETED,捕捉到这个广播,然后可以进行相应的操作,比如:通过捕 ...