网站首页 > 技术文章 正文
在我们浏览过的大多数网页中,轮播图基本上是随处可见的,主要用于网站Home页,作为前端技术的一种,目的是通过简易的动画效果和绚丽的图片吸引用户的眼球!轮播图的效果更是多种多样;在本文,小编主要想分享的是比较基本的版本
1. 轮播图的原理
其原理是:将一系列待展示的图片按照出场顺序排列。规定时间内,依次以一定的步长往左/右滑动,但显示区域的大小和位置都是固定的,因此也就使得不同的图片按顺序有出场机会,这就是轮播图。如下图所示:
因此我们可以注意到:
1)每张图片的宽度width与显示区域宽度相等;
2)每次移动的距离恰是这个width的值。
2. 实现
我们先在上次讲的“templates”文件夹下新建一个.html文件,这里我依旧使用上次的sketch.html
。
在“static/css/”下新建.css文件main.css,并在刚刚的.html文件中引入。在写前端的时候,一般我们是先在.html中定义我们要的元素,然后根据元素的样式需求在.css文件中定义,再在元素的开始标签中通过 class="..." 或者 id="..." 来引用。
<head>
……
<link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}"/>
……
</head>
下面直接给出我的代码。
// static/main.css
@charset "utf-8";
/* CSS Document */
.li_img{
float: left;
list-style: none;
}
.ul_img{
width: 8100px;
padding: 0px;
margin: 0px;
transition: all 2s;
}
.btn_img{
border: #FF8104 solid 1px;
border-radius: 15px;
}
.main_div{
width: 900px;
overflow: hidden;
position: relative;
height: 450px;
top: 100px;
display: block;
box-shadow: 5px 5px 10px #ccc;
}
.div_btn{
list-style: none;
border-radius: 15px;
background-color: #FFCF81;
width: 60px;
height: 30px;
left: 25%;
margin-left: 30px;
margin-top: 160px;
margin-bottom: 60px;
}
大家可以根据标注与效果自行根据自己的需求对.css代码做修改。但值得注意的是:这里我定义的显示区域.main_div的宽度是900px,意味着我准备的图片宽度也都是900px,每一次移动距离也都是900px。
sketch.html中的代码.
<!-- templates/sketch.html -->
<body>
……
<div>
<center>
<div class="main_div" id="main_div">
<ul class="ul_img">
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/01.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/02.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/03.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/04.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/05.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/06.jpg') }}"/></li>
<li class="li_img"><img src="{{ url_for('static', filename='images/sketch/07.jpg') }}"/></li>
</ul>
</div>
<div>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/01.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/02.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/03.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/04.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/05.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/06.jpg') }}"/>
<img class="btn_img div_btn" src="{{ url_for('static', filename='images/sketch/index/07.jpg') }}"/>
</div>
</center>
</div>
……
</body>
这里我用到七张图片存储在“static”下的“/images/sketch/”下,并且我还给每张图片准备了一张缩略图作为按钮,放在“static”下的“/images/sketch/index/”目录下,如图
接下来就是js代码了。在“static/js/”下新建“main.js”文件,在sketch.html中引入,
<head>
……
<script src="{{ url_for('static', filename='js/main.js') }}" type="text/javascript"></script>
……
</head>
内容如下:
// JavaScript Document
// variables for the Shuffling figures
var count = 0;// 计数:确定当前应该是第几张图片显示(count = 0, 1, 2, ..., (n-1))
var isgo = false;
/*
确定向左滑动还是向右滑动
1) isgo = true
一连串图片向左滑动
2) isgo = false
一连串图片向右滑动
*/
var timer;// 计时器
window.onload = function(){
var ul_img = document.getElementsByClassName("ul_img")[0];// 获取包含图片的容器
var li_img = document.getElementsByClassName("li_img");// 获取那一串图片
var div_btn = document.getElementsByClassName("div_btn");// 获取那一串按钮
div_btn[0].style.boxShadow = "3px 3px 6px #4c4c4c";// 对其一个按钮做添加阴影处理
showtime();// 开始计时
// 当轮播图顺序滑动时
function showtime(){
timer = setInterval(function(){
if(isgo === false){
console.log(count);
if(count >= li_img.length - 2){
count = li_img.length - 1;
isgo = true;
}else{
count++;
}
ul_img.style.transform = "translate(" + -900 * count + "px)";// 注意到这里的900了吗?这是每次滑动的距离
}else{
count--;
ul_img.style.transform = "translate(" + -900 * count + "px)";
if(count <= 0){
count = 0;
isgo = false;
}
}// 选择显示的图片,“去到哪里”
for(var i = 0; i < div_btn.length; ++i){
div_btn[i].style.boxShadow = "none";
}// 现将所有按钮恢复原状
div_btn[count].style.boxShadow = "3px 3px 6px #4c4c4c";// 再对应图片的按钮做阴影处理
}, 4000);// 规定每4秒换一次
}
// 当鼠标放在对应的按钮上时,马上去到对应的图片
for(var b = 0; b < div_btn.length; ++b){
div_btn[b].index = b;
// 当鼠标放在按钮上时,要停止计时
div_btn[b].onmouseover = function(){
clearInterval(timer);
for(var a = 0; a < div_btn.length; a++){
div_btn[a].style.boxShadow = "none";
}
div_btn[this.index].style.boxShadow = "3px 3px 6px #4c4c4c";
if(this.index === li_img.length - 1){
isgo = true;
}
if(this.index === 0){
isgo = false;
}
count = this.index;
ul_img.style.transform = "translate(" + -900 * count + "px)";
};
// 当鼠标移开时,继续计时
div_btn[b].onmouseout = function(){
showtime();
};
}
};
总结
在本文我们主要是分享了前端经典动画“轮播图”的制作。
预告
下一篇我们将正式步入前后端交互的学习,将主要围绕:
1)uploadfiles上传图片到后台,后台处理完毕后返回前端显示;
2)普通按钮(<input type="button"/>)的onclick函数激发的数据传递。
猜你喜欢
- 2024-10-15 Python Flask Web表单(flask form表单)
- 2024-10-15 如何在Flask应用程序中使用JSON Web Tokens进行安全认证
- 2024-10-15 综合指南:将 Flask 与 MongoDB 结合使用
- 2024-10-15 Flask 表单处理(flask formdata)
- 2024-10-15 三、flask博客项目实战-之表单(flask 表单)
- 2024-10-15 flask python web开发的简单易学框架
- 2024-10-15 Flask-APScheduler使用教程(flask apscheduler)
- 2024-10-15 flask 项目中使用 bootstrapFileInput(进阶篇)
- 2024-10-15 基于flask框架展示数据可视化的一次尝试
- 2024-10-15 iOS 17.3已修复,“快捷指令”高危漏洞被披露:可发送敏感数据
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)