不管是高校的网站还是电商的页面,焦点图的切换和轮播应该是一项不可或缺的应用。今天把焦点图轮播制作的技术要点做下笔记,以供日后查看。

一、结构层(HTML)
焦点图的HTML结构很简单,就是一个父容器(id=box),包含三个子容器,分别存放图片(id=pics)、底部按钮(id=dots)、作用切换箭头(class=turn)。加上样式后就是下图二的布局。
二、表示层(CSS)
页面的表现和风格总是离不开CSS。为叙述方便,后面采用id选择符名或类选择符名代表各div模块。
1.box
box作为父容器,是整个焦点图轮播结构在网页的直观表现,它的宽高就是要显示的图片的宽高。我将图片设置为宽600px、高400px,使父容器box居中显示,并加了阴影。样式大概都可以随自己爱好设置,但溢出一定要隐藏,定位一定要设置为相对定位,以使子容器的绝对定位准确。
#box{
width: 600px;
height: 400px;
margin-top: 100px;
margin-left: auto;
margin-right: auto;
overflow: hidden;
position: relative;
box-shadow: 10px 10px 5px #888;
}
2.pics
pics用于放置图片,因为是制作左右切换功能,高仍是一张图片的高,但宽=(展示的图片数量+2)*图片宽,原因在行为层再说明。
另外需要注意的是,由展示图片可知,pics在左右切换箭头和底部切换按钮的下层,所以z-index要设为1。
#pics{
width: 5400px;
height: 400px;
position: absolute;
z-index: 1;
}
3.dots
z-index设为2,置为上层显示;定位为绝对定位;其他样式随喜好。这里我设置了鼠标滑过的样式,以及配合js对应图片位置改变的样式(on)。
#dots{
width: 120px;
height: 10px;
position: absolute;
bottom: 25px;
left: 40%;
z-index: 2;
}
#dots span{
width: 10px;
height: 10px;
float: left;
margin-right: 5px;
background: #333;
border: solid 1px #FFF;
border-radius: 50%;
cursor: pointer;
}
#dots .on{background: orangered;}
#dots span:hover{background: orangered;}
4.turn
左右箭头的重要样式与dots一致,其他自定义。这里我设置了鼠标滑过box,才显现箭头。
.turn{
width: 40px;
height: 40px;
color: #fff;
background: orangered;
line-height: 39px;
text-align: center;
font-size: 36px;
font-weight: bold;
opacity: 0.5;
position: absolute;
top: 180px;
display: none;
z-index: 2;
cursor: pointer;
}
.turn:hover{opacity: 0.8;}
#box:hover .turn{display: block;}
至此页面的样式和布局完成,但行为层方法和功能的实现才是重点。
三、行为层(JavaScript)
定义函数前,先在全局作用域中获得页面的节点。
var box = document.getElementById('box');
var pics = document.getElementById('pics');
var dots = document.getElementById('dots').getElementsByTagName('span');
var pre = document.getElementById('pre');
var next = document.getElementById('next');
1.图片切换动画
轮播图的核心方法,在于图片的切换动画。而此函数的重点,是接收一个位移量offset,然后改变pics相对于box的left值,从而对图片进行显示。
之前CSS设置的,box的宽为600px,但pics的宽却为5400px,由于box溢出隐藏,所以页面只会显示一张图片;通过接收具体位移量offset,改变left值(减去或加上n个图片宽度),就可以改变显示的图片。
此外还有两个问题,如果不设置图片切换的速度,图片就会整张整张的变换,没有进入切换的效果;而且如果不停的点击切换,就会消耗太多的内存造成电脑卡机,出现页面停在前一张图未切换完就出现下一张等情况。所以要对图片做一个速度处理,以及一张图片为切换完就不允许其他切换的设置。
//图片切换函数
function turn(offset){
turned = true; //切换允许标志,在全局作用域中定义,true表示关闭允许切换
var new_left = parseInt(pics.style.left) + offset; //最后left值
var total_time = 300; //位移总时间
var interval = 10; //每次位移间隔时间
var speed = offset/(total_time/interval); //位移速度——每次位移量
function go(){
if((speed < 0 && parseInt(pics.style.left) > new_left) || (speed > 0 && parseInt(pics.style.left) < new_left)){ //右切||左切
pics.style.left = parseInt(pics.style.left) + speed +'px';
setTimeout(go,interval);
}else{
turned = false; //已切换完毕,开启允许切换
pics.style.left = new_left +'px';
if( new_left < -4200){
pics.style.left = -600 +'px';
}
else if( new_left > -600){
pics.style.left = -4200 +'px';
}
}
}
go();
}
2.箭头切换
在图片切换函数turn()基础上传入参数。因为是左右切换,所以每次直接传入一个图片宽度。向右切换传入-600,左切传入600。
这里要注意的就是,图片与底部按钮的同步,到两边的最后一张后参数的重置,以及是否允许切换的判断。
//箭头切换实现
next.onclick = function(){
if(index == 7){
index = 1;
}else{
index += 1;
}
show_dots();
if(!turned){
turn(-600);
}
};
pre.onclick = function(){
if(index == 1){
index = 7;
}else{
index -= 1;
}
show_dots();
if(!turned){
turn(600);
}
};
3.底部按钮实现
按钮与箭头的不同,在于点击它可以切换到任意一张图片,所以在对切换函数turn()传入参数前要先做一个计算。另外按钮对应样式的变化也不能忘记。
//按钮切换样式
function show_dots(){
for(var i = 0; i < dots.length; i++){
if(dots[i].className == 'on'){
dots[i].className = '';
break;
}
}
dots[index - 1].className = 'on';
}
//按钮切换实现
for(var i = 0; i < dots.length; i++){
dots[i].onclick= function(){
if(this.className == 'on'){
return;
}
var my_index = parseInt(this.getAttribute('index')); //注意! index是自定义属性
var offset = -600 * (my_index - index); //计算切换位移量
if(!turned){
turn(offset);
}
index = my_index;
show_dots();
}
}
4. 自动播放
自动播放自然就是设置定时器和清除定时器的问题,这里不再赘述。
//定时动画
function play(){
time = setInterval(function(){
next.onclick();
},3000);
}
//动画停止
function stop(){clearInterval(time);}
play();
box.onmouseover = stop;
box.onmouseout = play;
最后附上demo和源码链接:demo、源码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 焦点图
# 轮播
# 原生JS轮播图插件
# 非常优秀的JS图片轮播插件Swiper的用法
# 基于cssSlidy.js插件实现响应式手机图片轮播效果
# Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
# jQuery插件学习教程之SlidesJs轮播+Validation验证
# Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
# jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
# BootStrap的JS插件之轮播效果案例详解
# 原生JS实现旋转木马式图片轮播插件
# 深入解析js轮播插件核心代码的实现过程
# 就会
# 鼠标
# 设为
# 做一个
# 自定义
# 设置为
# 整张
# 滑过
# 自动播放
# 的是
# 太多
# 才是
# 就不
# 基础上
# 只会
# 要注意
# 很简单
# 仍是
# 我将
# 它可以
相关文章:
Python路径拼接规范_跨平台处理说明【指导】
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何在新浪SAE免费搭建个人博客?
怀化网站制作公司,怀化新生儿上户网上办理流程?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何高效完成自助建站业务培训?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
高防服务器:AI智能防御DDoS攻击与数据安全保障
装修招标网站设计制作流程,装修招标流程?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何确保西部建站助手FTP传输的安全性?
如何通过智能用户系统一键生成高效建站方案?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
建站之星24小时客服电话如何获取?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何在企业微信快速生成手机电脑官网?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
宝塔新建站点报错如何解决?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何用PHP工具快速搭建高效网站?
如何通过IIS搭建网站并配置访问权限?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
北京网站制作网页,网站升级改版需要多久?
南平网站制作公司,2025年南平市事业单位报名时间?
,交易猫的商品怎么发布到网站上去?
c# 在高并发场景下,委托和接口调用的性能对比
C++中引用和指针有什么区别?(代码说明)
广东企业建站网站优化与SEO营销核心策略指南
购物网站制作公司有哪些,哪个购物网站比较好?
网站制作话术技巧,网站推广做的好怎么话术?
如何通过虚拟主机快速搭建个人网站?
广德云建站网站建设方案与建站流程优化指南
黑客如何通过漏洞一步步攻陷网站服务器?
图册素材网站设计制作软件,图册的导出方式有几种?
制作销售网站教学视频,销售网站有哪些?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何在万网主机上快速搭建网站?
如何高效利用亚马逊云主机搭建企业网站?
网站制作公司排行榜,四大门户网站排名?
教学论文网站制作软件有哪些,写论文用什么软件
?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。