**轮播图实现原理:
通过多张图片平铺,用overflow:hidden只显示一张图片、其他的隐藏,无缝滚动用定时器改变元素的left值让图片呈现左右滚动的效果。**

HTML布局和内容:
1.容器container存放子容器,子容器lis的a标签存在图片。
2.子容器tips存放按钮小圆点。

<div id="container">
<div id="lis">
<a href="#"><img src="img/B1.jpg" alt=""></a>
<a href="#"><img src="img/B2.jpg" alt=""></a>
<a href="#"><img src="img/B3.jpg" alt=""></a>
<a href="#"><img src="img/B4.jpg" alt=""></a>
<a href="#"><img src="img/B5.jpg" alt=""></a>
</div>
<!-- 图片下面的那一排小圆点 到时候用JS动态输出-->
<ul id="tips">
<li class="active"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<!-- 左右按钮 -->
<div id="btn">
<a href="#" id="up">&lt;</a>
<a href="#" id="next">&gt;</a>
</div>
</div>

CSS样式:
1.注意container的overflow:hidden;只显示窗口的一张图片,把左右两边的都隐藏起来。
2.CSS3:after伪元素清除浮动,利用 clear 属性,包括在浮动元素末尾添加一个带有 clear: both 属性的空 div 来闭合元素,其实利用 :after 伪元素的方法也是在元素末尾添加一个内容为一个点并带有 clear: both 属性的元素实现的。
3.小圆点无论多少都要居中,CSS3:position & transform: translate(-50%) 实现块元素百分比下居中。

<style>
/* 容器的高 宽 相对定位 超出隐藏*/
#container{
width:800px;
height:400px;
margin: 0 auto;
position:relative;
overflow:hidden;
}
/************************ 内容的高 宽 绝对定位 偏移************************/
#lis{
width: 4000px;
height: 400px;
position:absolute;
left:0;
}
#lis a{
float:left;
}
/* 清除img浮动,正常撑开a高与高 */
#lis a:after{
content:"";
display:block;
clear:both;
}
/* 清除IMG之间边距 无缝拼接 */
#list img{
float:left;
} /******* 一排小圆点************/
#tips{
margin:0;
padding:0;
z-index:999;
position: absolute;
bottom: 0;
left: 50%;
transform: translate(-50%);
list-style:none; }
#tips li{
width:18px;
height: 18px;
border-radius:50%;
background:#333;
float:left;
margin-left:5px;
}
/* 切换到相应的图片 相应小圆点的颜色 */
#tips .active{
background:red;
}
/**** 左右按钮 绝对定位 大小 去下划线****************/
#btn a{
position:absolute;
top:50%;
margin-top:-100px;
font-size:100px;
text-decoration: none;
}
#btn #next{
position:absolute;
right:0%; }
</style>

静态的效果图了!

JavaScript部分
1.查找要触发的元素左右箭头!
2.创建事件当点击时改变偏移的值。
3.判断偏移值是否内容(#lis)的width;
4.设置自动轮播事件,制作定时器timer setInterval()执行多次!
5.设置暂停轮播事件,clearInterval(timer);//移除定时器!
6.鼠标移出onmouseout 移入onmouseover轮播图区域执行自动和暂停轮播事件
7.设置圆点和相应图片同步切换的事件,点击圆点切换图片 有闭包的知识!


      <script>
var next=document.getElementById("next");//查找一个叫next id;
var up=document.getElementById("up");//查找一个叫up id;
var lis=document.getElementById("lis");//查找一个叫lis id;
var imgCount=lis.getElementsByTagName("img");//查找lis所有图片;
var countMove=imgCount.length*-800;//定义变量用保存偏移的总值;
var container=document.getElementById("container");//获取整个轮播图区域
var ul=document.getElementById("tips");//查找一个叫tips id;
var list=ul.getElementsByTagName("li");//查找ul全部圆点
var timer;
var index=0;//list下标 从0开始!
console.log(lis.width);
var move=0;//定义变量用保存偏移的值;
//设置next下一张点击事件
2.
next.onclick=function(){
move-=800;//每点击一次偏移-800PX; 第一张图后style.left都为负值。
index+=1;
if(move===countMove){//如果偏移(move)等于countMove(4000),就move为0(0是第一张)
move=0;
index=0;
}
lis.style.left=move+"px";//设置向偏移left:move
circle();//切换相对应圆点
}
//设置up上一张点击事件
up.onclick=function(){
index-=1;
if(move===0){ //如果偏移(move)等于0,就move为countMove(4000);
move=countMove;
index=list.length-1;
}
move+=800;
lis.style.left=move+"px";//设置向偏移left:move
circle();//切换相对应圆点
}
//设置轮播事件
function play(){
timer=setInterval(function(){ //内置定时器多次执行
next.onclick();//每1.5秒执行下一张事件!!
},1500)
} play();//加载JS自动轮播!
//设置暂停轮播事件
function stop(){
clearInterval(timer);//移除定时器
}
container.onmouseout=play;//当鼠标移出轮播图区域执行自动轮播事件
container.onmouseover=stop;//当鼠标移入轮播图区域执行暂停轮播事件
//设置圆点和图片同步切换的事件
function circle(){
for(var i=0; list.length>i;i++){//for循环语句 循环所有圆点
if(list[i].className=="active"){ //if条件语句 如果其中一个圆点的Class等于active
list[i].className=""; //其他圆点就是Class设置为空
}
list[index].className="active";//list下标为index 设置Calss为cative;
}
}
for(var i=0; list.length>i;i++){ //for循环语句 循环所有圆点
(function(i){ //闭包
list[i].onclick=function(){ //圆点点击事件
lis.style.left=i*-800+"px";//设置lis偏移的值
index=i;
circle();
}
})(i); //传入I
} </script>

我是初学者:
借鉴于前辈的博客:http://www.cnblogs.com/LIUYAN...

javascript简单轮播图的更多相关文章

  1. JavaScript焦点轮播图

    在慕课学习了JavaScript焦点轮播图特效,在此做一个整理. 首先是html结构,我用的是本地同文件夹下的三张图片,多出来的第一张(pic3副本)和最后一张图片(pic1副本)是为了实现无缝切换效 ...

  2. JS---案例:简单轮播图

    案例:简单轮播图 div叫盒子,里面包了2个小盒子,一个是inner,一个是square inner的div是放ul,里面有li,a,和图片 square的div里面放span,是轮播图的小点 < ...

  3. HTML+CSS+Javascript实现轮播图效果

    HTML+CSS+Javascript实现轮播图效果 注意:根据自己图片大小来更改轮播图大小. <!doctype html> <html> <head> < ...

  4. JavaScript实现简单轮播图动画

    运行效果: 源代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...

  5. 手把手原生js简单轮播图

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  6. (新手向)基于Bootstrap的简单轮播图的手机实现

    个人电脑里存了不少适合手机欣赏的图片,但是放手机里看是件很占据资源的事.鉴于家里有一台电脑经常开着,正好用来做家庭局域网共享,于是笔者就设想通过一种比较简单环保的思路.通过手机访问电脑内的图片. 首先 ...

  7. js写的简单轮播图

    这个轮播图代码是从网上找来的,专门找了个写法简单的,只是作为一个小练习,大概原理如下: 1.首先是图片切换2.自动播放3.调用自动播放4.移动到容器上边停止播放,离开自动播放5.移动到导航上停止播放, ...

  8. 原生js简单轮播图 代码

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  9. 原生javascript焦点轮播图

    刚刚学会,写了一个轮播图效果,不过bug蛮多,请高手指点一下,谢谢 <!DOCTYPE html> <html> <head> <meta charset=& ...

随机推荐

  1. Seikimatsu Occult Tonneru(网络流,状态数(建不建边)不多时,可考虑直接进行枚举

    http://acm.hdu.edu.cn/showproblem.php?pid=4309 总结:边可存东西时,可新建一个点x连接u.v,x再连向汇点: #include<iostream&g ...

  2. ddt-python测试数据驱动工具(转载)

    背景 python 的unittest 没有自带数据驱动功能. 所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成. DDT是 “Data-Driven Tests”的缩写 ...

  3. IDEA+selenium3+火狐/谷歌驱动 JAVA初步环境搭建 笔记

    0 环境 系统环境:win7 selenium驱动 谷歌浏览器以及驱动 火狐浏览器以及驱动 1 驱动地址的下载 1.1 selenium jar包 https://www.seleniumhq.org ...

  4. [LC] 250. Count Univalue Subtrees

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  5. C#阶段小结

    一.数据类型: (一)内建类型: 整型(int ,short, long ,byte ,uint ,ushort, ulong ,sbyte): 浮点型(double float decimal): ...

  6. gitbook安装及初步使用

    gitbook安装 https://www.jianshu.com/p/421cc442f06c https://blog.csdn.net/lu_embedded/article/details/8 ...

  7. maven中 pom.xml与properties等配置文件之间互相读取变量

    问题由来: 最近公司的maven项目需要改进,希望把该项目依赖的一系列artifact放到properties文件中,这样做的目的是是为了很容易看到四月份release和七月份的release,它们所 ...

  8. keepalive笔记之二:keepalive+nginx(自定义脚本实现,上述例子也可以实现)

    keepalive的配置文件 ! Configuration File for keepalived global_defs { notification_email { acassen@firewa ...

  9. JFreeChart插件使用

    以java project为例,首先需要导入需要的jar包:jcommon-1.0.23.jar, jfreechart-1.0.19.jar. 画饼状图示例: package com.it.jfch ...

  10. <JZOJ5938>分离计划

    emm骚操作 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm ...