本文实例讲述了JS实现焦点图轮播效果的方法。分享给大家供大家参考,具体如下:

效果图如下:

一、所用到的知识点

1.DOM操作

2.定时器

3.事件运用

4.Js动画

5.函数递归

6.无限滚动大法

二、结构和样式

.banner{position:relative;width:624px;height:200px;overflow:hidden;}

.banner .list-banner{position:absolute;width:5000px;}

.banner .list-banner li{float:left;width:624px;height:200px;}

.banner .list-num-wp{position:absolute;bottom:7px;width:624px;height:11px;}

.banner .list-num{width:100px;margin:0 auto;}

.banner .list-num a{display:inline;float:left;width:11px;height:11px;margin:0 7px; background:url(../images/list-num.png) no-repeat;}

.banner .list-num a:hover{background:url(../images/list-num-hover.png));}

.banner .list-num a.hover{background:url(../images/list-num-hover.png);}

.banner .left a{display:block;position:absolute;width:49px;height:49px;top:75px;left:4px;background:url(../images/arrow.gif) 0 0;filter: Alpha(opacity=50);-moz-opacity:.5;opacity:0.5;}

.banner .right a{display:block;position:absolute;width:49px;height:49px;top:75px;right:4px;background:url(../images/arrow.gif) 0 -49px;filter: Alpha(opacity=50);-moz-opacity:.5;opacity:0.5;}

三、脚本思路

1.先左右按钮功能

window.οnlοad=function(){

var prev=document.getElementById("left");

var next=document.getElementById("right");

var list_banner=document.getElementById("list-banner");

next.οnclick=function(){

list_banner.style.left=parseInt(list_banner.style.left)-624+'px'; //注:html上的ul要加行间样式left:0;,否则这里动不起来

}

prev.οnclick=function(){

list_banner.style.left=parseInt(list_banner.style.left)+624+'px';

}

}

2.左右按钮点击的两句话很像,封装成函数

function animate(offset){

list_banner.style.left=parseInt(list_banner.style.left)+offset+'px';

}

next.οnclick=function(){

animate(-624);

}

prev.οnclick=function(){

animate(624);

}

3.无限滚动

①假图的做法

即图片为412341,小于最后一张位置的时候,回到第一张的位置,大于 第一张位置的时候,拉到最后一张的位置

function animate(offset){

var newLeft=parseInt(list_banner.style.left)+offset;

list_banner.style.left=newLeft+'px';

if(newLeft

list_banner.style.left=-624+"px";

}

if(newLeft>-624){

list_banner.style.left=-2496+"px";

}

}

4.小圆点跟着左右按钮切换

var index=1;

function showDot(){

for(var i=0;i

list_num[i].className="";

}

list_num[index-1].className="hover";

}

next.οnclick=function(){

animate(-624);

index++;

if(index>4){

index=1;

}

showDot();

}

prev.οnclick=function(){

animate(624);

index--;

if(index<1){

index=4;

}

showDot();

}

5.点击小圆点图片滚动及小圆点切换

for(var i=0;i

list_num[i].οnclick=function(){

if(this.className=="hover"){

return;

}

var myIndex=parseInt(this.getAttribute("index"));

var offset=-624*(myIndex-index);

index=myIndex;

animate(offset);

showDot();

}

}

①点自己的时候不执行下列代码

关键是要取到点击的是第几张图片,不能直接var myIndex=this.index;因为index是自定义属性,dom自带属性可以通过点来获取,自定义属性不行,.getAttribute()既可以获取自定义属性,又可以获取dom自带属性

③更新index值,index=myIndex;

6.动画函数(有一个渐变的运动过程)

function animate(offset){

animated=true;

var newLeft=parseInt(list_banner.style.left)+offset;

var time=300; //位移总时间

var interval=30; //位移间隔时间

var speed=offset/(time/interval); //每次移动距离

speed=speed>0?Math.ceil(speed):Math.floor(speed); //可能存在小数,取整

function go(){

if((speed < 0 && parseInt(list_banner.style.left)>newLeft)||(speed>0&&parseInt(list_banner.style.left)

list_banner.style.left=parseInt(list_banner.style.left)+speed+'px';

setTimeout(go,interval); //不止做一次运动(go函数),每隔30毫秒前进一下

}

else{

animated=false;

list_banner.style.left=newLeft+'px';

if(newLeft

list_banner.style.left=-624+"px";

}

if(newLeft>-624){

list_banner.style.left=-2496+"px";

}

}

}

go();

}

next.οnclick=function(){

if(!animated){

index++;

}

if(index>4){

index=1;

}

showDot();

if(!animated){

animate(-624);

}

}

prev.οnclick=function(){

if(!animated){

index--;

}

if(index<1){

index=4;

}

showDot();

if(!animated){

animate(624);

}

}

for(var i=0;i

list_num[i].οnclick=function(){

if(this.className=="hover"){

return;

}

var myIndex=parseInt(this.getAttribute("index"));

var offset=-624*(myIndex-index);

index=myIndex;

showDot();

if(!animated){

animate(offset);

}

}

}

①一个函数不停地在一个条件后调用自身,这种做法就叫做递归,这里通过递归可以实现animate这个函数的动画效果

②不停点就意味着不停调用animate函数,可能会造成卡顿,图片乱刷,需要优化,引进变量animated

7.自动播放

function autoplay(){

timer=setInterval(function(){

next.onclick();

},1000)

}

function stopautoplay(){

clearInterval(timer);

}

banner.οnmοuseοver=stopautoplay;

banner.οnmοuseοut=autoplay;

autoplay();

setTimeout只执行一次,之前一直执行,是因为递归

setInterval是每隔多少时间

8.假图的优化

实际运用中,图片肯定是按顺序存放,所以假图最好通过js来生成,而不是本身写在html上

var img_first=list_banner.getElementsByTagName("li")[0];

var img_last=list_banner.getElementsByTagName("li")[3];

list_banner.appendChild(img_first.cloneNode(true));

list_banner.insertBefore(img_last.cloneNode(true),list_banner.getElementsByTagName("li")[0]);

appendChild是将新的节点添加到目标的最后一个子节点之后

insertBefore是将新的节点添加到已存在的子节点之前

cloneNode方法,true表示深克隆,false表示浅克隆,深克隆是将标签和标签里的内容都复制过来,而浅克隆不复制内容

希望本文所述对大家JavaScript程序设计有所帮助。

html焦点图自动轮播,JS实现焦点图轮播效果的方法详解相关推荐

  1. new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解

    new Date将字符串转化成日期格式 兼容IE,ie8如何通过new Date将字符串转化成日期格式,js中如何进行字符串替换, replace() 方法详解 //获得年月日时分秒 //传入日期// ...

  2. matlab合并有序数组,《数组合并》JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个包解决你所有的JS问题,点击获取 需要将两个数组 ...

  3. php引入路径配置,require.js的路径配置和css的引入方法详解

    这篇文章主要介绍了详解require.js配置路径的用法和css的引入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前端开发在近一两年发展的非常快,JavaScript作为主流的开发语言得到了前 ...

  4. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...

    本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...

  5. JS中的call、apply、bind方法详解

    bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(co ...

  6. 原生JS实现韩雪冬轮播图

    分享一个用原生JS实现的韩雪冬轮播图,效果如下: 实现代码如下: <!DOCTYPE html> <html><head lang="en">& ...

  7. 2021年原生JS实现韩雪冬轮播图

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

  8. js实现淡入淡出轮播图

    js实现淡入淡出轮播图 先描述一下我的思路 第一步:首先使用定位将图片堆积起来 第二步:利用透明度的变化来实现图片的淡入淡出 第三步:设置一个索引,贯穿整个动画过程. 首先,先展示HTML代码: &l ...

  9. 左右无缝轮播html,JS实现左右无缝轮播图代码

    废话不多说了,直接给大家贴代码了. 无缝轮播图: 无缝轮播图 *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;h ...

最新文章

  1. 在测试时用到的一些mysql的小技巧(持续更新)
  2. css3效果: animate实现点点点loading动画效果(一)
  3. 数据中心机房应该如何布线,机柜布线方法详解!
  4. 计算机屏幕显示电缆借口,电脑关机后显示器显示请检查电缆接口怎么办成功解决...
  5. openfiler的iSCSI配置(二)
  6. [渝粤题库]西北工业大学统计学
  7. 学习了时间和测试题目
  8. salt grains详解
  9. Python中的X[:,0]和X[:,1]
  10. 4.XXE (XML External Entity Injection)
  11. Spring的JdbcTemplate实现分页
  12. EDEM 2020的安装
  13. vSphere ESXI 详细安装教程
  14. 大学生计算机应用大赛广告设计,第11届全国大学生计算机应用能力与信息素养大赛 “平面视觉设计” 赛项圆满结束...
  15. win10一键重置win10,解决所有系统bug,不删除任何文件和应用
  16. 大道至简之九:周期的实质与投资机会
  17. 解决github :error: failed to push some refs to 问题
  18. 数据库常考选择题合集
  19. js提取数组对象中的最大值和最小值
  20. 国家标准《智能服务 预测性维护 通用要求》

热门文章

  1. 基于平均值为枢轴的快速排序算法
  2. 十大监控工具,值得一试
  3. Android 仿余额宝数字动画实现
  4. 什么是大数据采集?大数据采集的过程是什么?
  5. iPhone5越狱后经典插件个人推荐
  6. macbook pro的漏电
  7. 计算机无法识别平板电脑,平板电脑连接电脑没反应怎么办【图解】
  8. GD32E230 ADC注入通道
  9. Au 效果器详解:响度计
  10. UE4摄像机系统解析