javascript简单轮播图
**轮播图实现原理:
通过多张图片平铺,用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"><</a>
<a href="#" id="next">></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简单轮播图的更多相关文章
- JavaScript焦点轮播图
在慕课学习了JavaScript焦点轮播图特效,在此做一个整理. 首先是html结构,我用的是本地同文件夹下的三张图片,多出来的第一张(pic3副本)和最后一张图片(pic1副本)是为了实现无缝切换效 ...
- JS---案例:简单轮播图
案例:简单轮播图 div叫盒子,里面包了2个小盒子,一个是inner,一个是square inner的div是放ul,里面有li,a,和图片 square的div里面放span,是轮播图的小点 < ...
- HTML+CSS+Javascript实现轮播图效果
HTML+CSS+Javascript实现轮播图效果 注意:根据自己图片大小来更改轮播图大小. <!doctype html> <html> <head> < ...
- JavaScript实现简单轮播图动画
运行效果: 源代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...
- 手把手原生js简单轮播图
在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...
- (新手向)基于Bootstrap的简单轮播图的手机实现
个人电脑里存了不少适合手机欣赏的图片,但是放手机里看是件很占据资源的事.鉴于家里有一台电脑经常开着,正好用来做家庭局域网共享,于是笔者就设想通过一种比较简单环保的思路.通过手机访问电脑内的图片. 首先 ...
- js写的简单轮播图
这个轮播图代码是从网上找来的,专门找了个写法简单的,只是作为一个小练习,大概原理如下: 1.首先是图片切换2.自动播放3.调用自动播放4.移动到容器上边停止播放,离开自动播放5.移动到导航上停止播放, ...
- 原生js简单轮播图 代码
在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...
- 原生javascript焦点轮播图
刚刚学会,写了一个轮播图效果,不过bug蛮多,请高手指点一下,谢谢 <!DOCTYPE html> <html> <head> <meta charset=& ...
随机推荐
- C# 元组
Tuple<,); Console.WriteLine(t.Item1); Console.WriteLine(t.Item2); C#7 可以使用圆括号声明一个元组: (); Console. ...
- 0x06 - Nginx 负载均衡会话保持
Nginx 负载均衡会话保持 背景 负载均衡时,如果APP需要保持特定状态的时候,就要保证同一用户的 session 会被分配到同一台服务器上. 实现方案 使用cookie 将用户的 session ...
- 计算a^b==a+b在(l,r)的对数Codeforces Round #597 (Div. 2)
题:https://codeforces.com/contest/1245/problem/F 分析:转化为:求区间内满足a&b==0的对数(解释见代码) ///求满足a&b==0在区 ...
- VB6实现Excel多工作簿数据合并
以前的同事,工作需要,让我帮忙完成多个工作簿的汇总. 我就用最熟悉的VB6写了一个Form应用程序,这是因为我不知道她目前的系统和Office情况,如果太高大上了,她不会部署安装.索性就简单粗暴地来个 ...
- mysql操作命令梳理-grant授权和revoke回收权限
在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke:grant授权格式:grant 权限列表 o ...
- Xcode查看iOS崩溃与崩溃日志分析
一.造成崩溃的原因 1.代码中存在bug 2.Watchdog 超时机制 3.用户强制退出 4.低内存终止 5.其他违法系统规则的操作,大部分是内存问题 二.崩溃的类型 1.信号错误类 (1)EXC_ ...
- [LC] 40. Combination Sum II
Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...
- php防止post数据刷新重复刷新。后退 等重复提交?
目前测试最好的办法:同步令牌(Token)机制来解决Web应用中重复提交的问题.还在研究中,稍后带来
- django反向解析和正向解析
Django的正向解析和反向解析 先创建一个视图界面 urls.py index.html index页面加载的效果 正向解析 test/?result=1 所谓正向解析就是直接在这里写地址 向url ...
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...