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

效果图如下:
一、所用到的知识点
1.DOM操作
2.定时器
3.事件运用
4.Js动画
5.函数递归
6.无限滚动大法
二、结构和样式
<div id="banner" class="banner">
<ul id="list-banner" class="list-banner fn-clear" style="left:-624px;">
<li><a href="#"><img src="images/banner4.jpg" width="624" height="200" alt="" title="" /></a></li>
<li><a href="#"><img src="images/banner1.jpg" width="624" height="200" alt="" title="" /></a></li>
<li><a href="#"><img src="images/banner2.jpg" width="624" height="200" alt="" title="" /></a></li>
<li><a href="#"><img src="images/banner3.jpg" width="624" height="200" alt="" title="" /></a></li>
<li><a href="#"><img src="images/banner4.jpg" width="624" height="200" alt="" title="" /></a></li>
<li><a href="#"><img src="images/banner1.jpg" width="624" height="200" alt="" title="" /></a></li>
</ul>
<div class="list-num-wp">
<div id="list-num" class="list-num fn-clear">
<a href="#" class="hover"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
</div>
</div>
<div class="left">
<a id="left" href="#"></a>
</div>
<div class="right">
<a id="right" href="#"></a>
</div>
</div>
.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.onload=function(){
var prev=document.getElementById("left");
var next=document.getElementById("right");
var list_banner=document.getElementById("list-banner");
next.onclick=function(){
list_banner.style.left=parseInt(list_banner.style.left)-624+'px'; //注:html上的ul要加行间样式left:0;,否则这里动不起来
}
prev.onclick=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.onclick=function(){
animate(-624);
}
prev.onclick=function(){
animate(624);
}
3.无限滚动
①假图的做法
即图片为412341,小于最后一张位置的时候,回到第一张的位置,大于 第一张位置的时候,拉到最后一张的位置
function animate(offset){
var newLeft=parseInt(list_banner.style.left)+offset;
list_banner.style.left=newLeft+'px';
if(newLeft<-2496){
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.length;i++){
list_num[i].className="";
}
list_num[index-1].className="hover";
}
next.onclick=function(){
animate(-624);
index++;
if(index>4){
index=1;
}
showDot();
}
prev.onclick=function(){
animate(624);
index--;
if(index<1){
index=4;
}
showDot();
}
5.点击小圆点图片滚动及小圆点切换
for(var i=0;i<list_num.length;i++){
list_num[i].onclick=function(){
if(this.className=="hover"){
return;
}
var myIndex=parseInt(this.getAttribute("index"));
var offset=-624*(myIndex-index);
index=myIndex;
animate(offset);
showDot();
}
}
①点自己的时候不执行下列代码
②
<div class="list-num-wp">
<div id="list-num" class="list-num fn-clear">
<a index="1" href="#" class="hover"></a>
<a index="2" href="#"></a>
<a index="3" href="#"></a>
<a index="4" href="#"></a>
</div>
</div>
关键是要取到点击的是第几张图片,不能直接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)<newLeft)){ //newLeft目标值
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<-2496){
list_banner.style.left=-624+"px";
}
if(newLeft>-624){
list_banner.style.left=-2496+"px";
}
}
}
go();
}
next.onclick=function(){
if(!animated){
index++;
}
if(index>4){
index=1;
}
showDot();
if(!animated){
animate(-624);
}
}
prev.onclick=function(){
if(!animated){
index--;
}
if(index<1){
index=4;
}
showDot();
if(!animated){
animate(624);
}
}
for(var i=0;i<list_num.length;i++){
list_num[i].onclick=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.onmouseover=stopautoplay;
banner.onmouseout=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相关内容感兴趣的读者可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 焦点图
# 轮播
# 很棒的一组js图片轮播特效
# 基于JavaScript实现带缩略图的轮播效果
# JavaScript实现大图轮播效果
# 基于vue.js实现图片轮播效果
# 原生JS实现匀速图片轮播动画
# js实现适合新闻类图片的轮播效果
# 原生js实现无缝轮播图效果
# 递归
# 自定义
# 自带
# 第一张
# 每隔
# 小圆点
# 自己的
# 的是
# 行间
# 是因为
# 相关内容
# 遍历
# 感兴趣
# 数据结构
# 可以通过
# 给大家
# 可以实现
# 几张
# 既可
# 更多关于
相关文章:
昆明高端网站制作公司,昆明公租房申请网上登录入口?
,如何利用word制作宣传手册?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何安全更换建站之星模板并保留数据?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何在云主机上快速搭建多站点网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
,制作一个手机app网站要多少钱?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
济南企业网站制作公司,济南社保单位网上缴费步骤?
如何在万网自助建站平台快速创建网站?
c# 在高并发场景下,委托和接口调用的性能对比
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
佛山网站制作系统,佛山企业变更地址网上办理步骤?
建站主机选哪家性价比最高?
小型网站建站如何选择虚拟主机?
建站之星图片链接生成指南:自助建站与智能设计教程
设计网站制作公司有哪些,制作网页教程?
php json中文编码为null的解决办法
如何打造高效商业网站?建站目的决定转化率
建站之星下载版如何获取与安装?
小程序网站制作需要准备什么资料,如何制作小程序?
如何选择高效便捷的WAP商城建站系统?
建站之星在线版空间:自助建站+智能模板一键生成方案
建站之星会员如何解锁更多建站功能?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站之星免费模板:自助建站系统与智能响应式一键生成
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何高效完成独享虚拟主机建站?
如何用西部建站助手快速创建专业网站?
建站ABC备案流程中有哪些关键注意事项?
C#如何序列化对象为XML XmlSerializer用法
建站之星后台管理系统如何操作?
红河网站制作公司,红河事业单位身份证如何上传?
安云自助建站系统如何快速提升SEO排名?
寿县云建站:智能SEO优化与多行业模板快速上线指南
济南网站制作的价格,历城一职专官方网站?
宝塔新建站点报错如何解决?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
如何快速搭建高效WAP手机网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
网站制作说明怎么写,简述网页设计的流程并说明原因?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
网站app免费制作软件,能免费看各大网站视频的手机app?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速上传自定义模板至建站之星?
公众号网站制作网页,微信公众号怎么制作?
如何快速搭建高效WAP手机网站吸引移动用户?
宝塔建站后网页无法访问如何解决?
如何在橙子建站上传落地页?操作指南详解
*请认真填写需求信息,我们会在24小时内与您取得联系。