**轮播图实现原理:
通过多张图片平铺,用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. mysql绿色版小白简易安装教程

    第一步,解压并安装mysql 我们先解压整个安装包 然后进入解压后的安装包 复制安装包路径 然后按Windows键,打开"开始",输入cmd 接着以管理员方式打开cmd 如图 接着 ...

  2. ionic3 修改打包时 android sdk 路径

    修改 /platforms/android/local.properties 文件

  3. Codeforces Round #599 (Div. 2)D 边很多的只有0和1的MST

    题:https://codeforces.com/contest/1243/problem/D 分析:找全部可以用边权为0的点连起来的全部块 然后这些块之间相连肯定得通过边权为1的边进行连接 所以答案 ...

  4. PAT甲级——1041 Be Unique

    1041 Be Unique Being unique is so important to people on Mars that even their lottery is designed in ...

  5. html lang="en"

    <html lang="en">向搜索引擎表示该页面是html语言,并且语言为英文网站,其"lang"的意思就是“language”,语言的意思,而 ...

  6. ExecutorCompletionService理解记忆

    java.util.concurrent 类 ExecutorCompletionService<V> java.lang.Object   继承者 java.util.concurren ...

  7. 浏览器CA认证流程

    转载:https://blog.csdn.net/qq_22771739/article/details/86479411 首先说说证书的签发过程: 服务方 S 向第三方机构CA提交公钥.组织信息.个 ...

  8. [LC] 437. Path Sum III

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  9. OpenWrt Web 开发 LuCI框架 lua语言

    LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口.Lua是一个小巧的脚本语言,很容易嵌入其它语言.轻量级 ...

  10. u盘出现大文件无法复制的解决

    如果u盘出现大文件无法复制的情况,修改U盘的文件系统格式: 把U盘格式化为NTFS格式.  FAT32的都不能放4G+的文件;右键格式化里如果没有NTFS,就在开始运行里输入cmd 然后输入" ...