在慕课学习了JavaScript焦点轮播图特效,在此做一个整理。

首先是html结构,我用的是本地同文件夹下的三张图片,多出来的第一张(pic3副本)和最后一张图片(pic1副本)是为了实现无缝切换效果。通过设置div容器的left值来实现图片切换时,当轮播到pic3需要切换到pic1时,最后一张图片(也就是pic1副本)被切换进来,此时left值已经为-1600px,并且同时我们又将其left值改为-400px,这样就回到了真正的第一张图pic1。:

<div id="container">
<div id="pic" style="left:-400px">
<div><a href="javascript:;"><img src="DSC02637.jpg" alt="pic3copy"></a></div>
<div><a href="javascript:;"><img src="DSC01627.jpg" alt="pic1"></a></div>
<div><a href="javascript:;"><img src="DSC01628.jpg" alt="pic2"></a></div>
<div><a href="javascript:;"><img src="DSC02637.jpg" alt="pic3"></a></div>
<div><a href="javascript:;"><img src="DSC01627.jpg" alt="pic1copy"></a></div>
</div>
<ul id="position">
<li class="cur"></li>
<li class=""></li>
<li class=""></li>
</ul>
<a href="javascript:;" id="prev" class="arrow">&lt;</a>
<a href="javascript:;" id="next" class="arrow">&gt;</a> </div>

css样式

*{
margin:;
padding:;
text-decoration: none;
} #container{
position: relative;
width: 400px;
height: 200px;
overflow: hidden;/*隐藏溢出的图片*/
}
#pic{
width:2000px;/*5张图的宽度*/
position: absolute;/*基于父容器进行定位*/ }
#pic div{
float: left;
background: #5dd94e;
}
#pic div img{
width: 400px;
height: 200px;
}
#position{
position: absolute;
bottom:;
right:;
margin:;
background: #000;
opacity: 0.4;
width: 400px;
text-align: center;
}
#position li{
width: 10px;
height: 10px;
margin:0 2px;
display: inline-block;
-webkit-border-radius: 5px;
border-radius: 5px;
background-color: #afafaf;
}
#position .cur{
background-color: #ff0000;
} .arrow {
cursor: pointer;
display: none;
line-height: 39px;
text-align: center;
font-size: 36px;
font-weight: bold;
width: 40px;
height: 40px;
position: absolute;
z-index:;
top: 80px;
background-color: RGBA(0,0,0,.3);
color: #fff;
}
.arrow:hover {
background-color: RGBA(0,0,0,.7);
}
#container:hover .arrow {
display: block;
}
#prev {
left: 20px;
}
#next {
right: 20px;
}

JavaScript

window.onload=function(){
var container=document.getElementById("container");
var pic=document.getElementById("pic");
var btns=document.getElementById("position").getElementsByTagName("li");
var prev=document.getElementById("prev");
var next=document.getElementById("next");
var flag=false;
var index=0;//小圆点索引
for (var i = 0; i < btns.length; i++) {
btns[i].index=i;
}
//控制小圆点显示
function showBtn(index){
for (var i = 0; i < btns.length; i++) {
if(btns[i].className=='cur'){
btns[i].className='';
break;
} }
btns[index].className="cur";
}
//向右滑动index+1,index>2,即从最后一张切换到第一张时,index置为0
//flag为true标识正在切换
next.onclick=function(){
if(flag){
return;
}
index++;
index = index > 2 ? 0 : index;
showBtn(index);
if(!flag){
animate(-400);
}
}
prev.onclick=function(){
if(flag){
return;
}
index--;
index = index < 0 ? 2 : index;
showBtn(index);
if(!flag){
animate(400);
}
}
function animate(offset){
flag=true;
var newLeft=parseInt(pic.style.left) + offset ; var time=300;//位移总时间
var interval=10;//位移间隔时间
var speed=offset/(time/interval);//每次位移量
//平滑移动
function go(){
if ( (speed > 0 && parseInt(pic.style.left) < newLeft) || (speed < 0 && parseInt(pic.style.left) > newLeft)) {
pic.style.left = parseInt(pic.style.left) + speed + 'px';
setTimeout(go, interval);
}
else{
flag=false;
pic.style.left = newLeft+ "px";
if(newLeft > -400 ){
pic.style.left = -1200 + "px";
}
if(newLeft < -1200 ){
pic.style.left = -400 + "px";
}
} }
go(); }
//小圆点点击事件
for (var i = 0; i < btns.length; i++) {
btns[i].onclick=function (){
if (flag) {
return;
}
//点击当前轮播图片则不继续执行
if(this.className=="cur"){
return;
}
var myIndex=this.index-index;
var offset=-400*myIndex;
index=this.index;
showBtn(index);
animate(offset); }
}
//自动播放
function play() {
timer = setTimeout(function () {
next.onclick();
play();
}, 2000);
}
function stop() {
clearTimeout(timer);
}
container.onmouseover = stop;
container.onmouseout = play; play(); }

JavaScript焦点轮播图的更多相关文章

  1. 原生javascript焦点轮播图

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

  2. 原生js焦点轮播图

    原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...

  3. js焦点轮播图

    汇集网上焦点轮播图的实现方式,自己试了下,不过鼠标悬浮停止动画和鼠标离开动画播放好像没生效,不太明白,最后两行代码中,为什么可以直接写stop和play.不用加括号调用函数么?求懂的大神指点! 所用知 ...

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

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

  5. JS---案例---左右焦点轮播图(tb)

    案例---左右焦点轮播图(tb) <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  6. 封装一个简单的原生js焦点轮播图插件

    轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

  7. 原生js焦点轮播图的实现

    继续学习打卡,武汉加油,逆战必胜!今日咱们主要探讨一下原生js写轮播图的问题, 简单解析一下思路: 1,首先写好css样式问题 2,考虑全局变量:自动播放的定时器,以及记录图片位置的角标Index 2 ...

  8. jquery手写焦点轮播图-------解决最后一张无缝跳转第一张的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. JavaScript实现轮播图效果

    我又来了,同志们.老想你们了 捕获小可爱一枚. 下面进入正题:用JavaScript原生代码写轮播图效果. 具体效果就不多说了,网站上面的轮播效果我们都知晓.下面是展示代码 html代码: <d ...

随机推荐

  1. js两种定义函数、继承方式及区别

    一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function ...

  2. QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)

    最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了很多人家的SDK,绝大部分用VC编写,而且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库,所 ...

  3. 解决rspec 生成报告时报utf-8错误的方法

    找到gems\1.9.1\gems\rspec-core-2.14.3\lib\rspec\core\formatters\snippet_extractor.rb文件中的第27行: 在这边记录一下, ...

  4. Tips12: 私人定制 专属的Unity3D 脚本模板

    在使用U3D的过程中,新建一个C#脚本,它包含着空的Start()和Update()函数.  根据个人习惯的不同,可能有些人有着自己的脚本风格,每次进去都增删改很麻烦,这里介绍一个更改新建脚本模板的方 ...

  5. 一种感觉不太好的设置radioButton的方法

    从后台传到前台,让前台的Radiobutton被选中. jquery代码: if(b_type == '') { return false; } else if($('input[name = &qu ...

  6. 就这样获取文件的MD5和大小

    纠结真蛋疼 判断一件事值不值得去做的唯一标准是这件事是不是令我纠结.如果纠结了,就不去做了!但是,人总要活着,又能怎样.谁说男人就没有那么几天...... 从极速妙传说起 在现在各大厂商都推出免费云盘 ...

  7. DZNEmptyDataSet,优秀的空白页或者出错页封装

    简介 项目主页:https://github.com/dzenbot/DZNEmptyDataSet 提示:主要用于UITableView和UICollectionView,也可以用于UIScroll ...

  8. 一次领域驱动设计(DDD)的实际应用

    笔者先前参与了一个有关汽车信息的网站开发,用于显示不同品牌的汽车的信息,包括车型,发动机型号,车身尺寸和汽车报价等信息.在建模时,我们只需要创建名为Car的实体(Entity)对象.其他的信息,比如车 ...

  9. eclipse中 properties文件编码问题

    1. Eclipse修改设置 项目中用到了配置文件,所以在Eclipse中新建.properties文件,文件中编辑了中文,在保存时Eclipse报出以下错误: 解决这个问题的方法: 依次选择: 菜单 ...

  10. Linux各版本的本地root密码破解方法

    (一)RedHat/CentOS/Fedora 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel 那行最后加上S (或者Single) 3.按B,启动到single-user ...