CSS3图片轮播效果
原文:CSS3图片轮播效果
在网页中用到图片轮播效果,单纯的隐藏、显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间。css3的出现,让动画变得不再是问题,而且简单易用。下面介绍我用css3与js写的一个图片轮播效果。
一般图片轮播就是三四张图片:
<div class="wrap">
<div class="carousel">
<div><img src="http://b204.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/DAx8jd*wHkeZfn2KFFIozuCId3oyygApuIabRH0huoI!/b/Ydkzp3nFfQAAYrelonkwfwAA&bo=ngL2AQAAAAABAEw!" /></div>
<div><img src="http://b206.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/ajO.4FllSbmZVzpKUjPuydfO50ov0WWQ6cE0k0LIrOw!/b/Yci2zXo*cwAAYgFU0nokCAAA&bo=YwLqAQAAAAABAK0!&rf=viewer_4" /></div>
<div><img src="http://b206.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/0HDFCiFDzavtBxpA.3J3bzxmEzO2MqmnCO*9Us*s5PA!/b/YU5U1XoGcQAAYn3J0HqhcQAA&bo=TgKlAQAAAAABAM8!&rf=viewer_4" /></div>
</div>
</div>
首先将图片左浮动成一排,最外层div设置宽度、高度,然后用 overflow:hidden 只显示第一张图片,隐藏超出的宽度部分的其他图片。样式表如下:
<style>
.wrap {
width: 600px;
min-height:400px;
margin: 0 auto;
position: relative;
overflow: hidden;//隐藏超出的内容
}
.carousel {
position: absolute;//定位图片
transition: all 0.5s ease-in 0s;//轮播动画
}
img {
width: 100%;
}
.carousel div {
float: left;
width: 33.333%;
text-align: center;
}
.button {
text-align: center;
}
</style>
其中最关键的就是:
transition: all 0.5s ease-in 0s;
这就是css3中的过渡属性,当元素从一种样式变换为另一种样式时为元素添加效果。属性中的每个值得意义:要过渡的属性、完成过渡的时间、过渡的动画效果、延迟开始时间
我把设置图片的宽度和全部图片的总宽度在js中进行,因为图片的张数可能会变。如果在css中设置,那么图片数变化的时候,就要修改css中相应的值,而在js中就可以一劳永逸。下面是js:
<script>
(function () {
var carousel = document.querySelector(".carousel");
var img = carousel.querySelectorAll("div");
var len = img.length;
[].forEach.call(img, function (item) {
item.style.width = (100 / len) + "%";//设置每张图片宽度
});
carousel.style.left = "0%";//设置left
carousel.style.width = (100 * len) + "%";//设置全部图片宽度
var pre = document.querySelector(".pre");
var next = document.querySelector(".next");
var i = 0;
next.onclick = function () {
var left = carousel.style.left;
if (i < len - 1) {
carousel.style.left = (parseInt(left) - 100) + "%";//当还没到最后一张图片时left减100%
i++;
}
else if (i == len - 1) {
carousel.style.left = "0%";最后一张时,点击按钮跳到第一张
i = 0;
}
};
pre.onclick = function () {
var left = carousel.style.left;
if (i > 0) {
carousel.style.left = (parseInt(left) + 100) + "%";//不是第一张时left加100%
i--;
} else if (i == 0) {
carousel.style.left = -parseInt(carousel.style.width) + 100 + "%";//第一张时,点击按钮跳到最后一张
i = len - 1;
}
};
}());
</script>
当点击按钮时,改变元素的left值,就会出现动画效果,因为css中设置了 transition: all 0.5s ease-in 0s ,就是当left改变时,立即慢速开始过渡效果,在0.5秒之内完成。
图片轮播效果就已经完成了,贴出全部代码:
<!DOCTYPE html>
<html>
<head>
<title>图片轮播</title>
<meta charset="utf-8" />
<style>
.wrap {
width: 600px;
min-height:400px;
margin: 0 auto;
position: relative;
overflow: hidden;
}
.carousel {
position: absolute;
transition: all 0.5s ease-in 0s;
}
img {
width: 100%;
}
.carousel div {
float: left;
text-align: center;
}
.button {
text-align: center;
}
</style>
</head>
<body>
<div class="wrap">
<div class="carousel">
<div><img src="http://b204.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/DAx8jd*wHkeZfn2KFFIozuCId3oyygApuIabRH0huoI!/b/Ydkzp3nFfQAAYrelonkwfwAA&bo=ngL2AQAAAAABAEw!" /></div>
<div><img src="http://b206.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/ajO.4FllSbmZVzpKUjPuydfO50ov0WWQ6cE0k0LIrOw!/b/Yci2zXo*cwAAYgFU0nokCAAA&bo=YwLqAQAAAAABAK0!&rf=viewer_4" /></div>
<div><img src="http://b206.photo.store.qq.com/psu?/41e4346e-5d60-4a3e-8af9-0492dd6f0e56/0HDFCiFDzavtBxpA.3J3bzxmEzO2MqmnCO*9Us*s5PA!/b/YU5U1XoGcQAAYn3J0HqhcQAA&bo=TgKlAQAAAAABAM8!&rf=viewer_4" /></div>
</div>
</div>
<div class="button"><button class="pre">上一张</button><button class="next">下一张</button></div> <script>
(function () {
var carousel = document.querySelector(".carousel");
var img = carousel.querySelectorAll("div");
var len = img.length;
[].forEach.call(img, function (item) {
item.style.width = (100 / len) + "%";
});
carousel.style.left = "0%";
carousel.style.width = (100 * len) + "%";
var pre = document.querySelector(".pre");
var next = document.querySelector(".next");
var i = 0;
next.onclick = function () {
var left = carousel.style.left;
if (i < len - 1) {
carousel.style.left = (parseInt(left) - 100) + "%";
i++;
}
else if (i == len - 1) {
carousel.style.left = "0%";
i = 0;
}
};
pre.onclick = function () {
var left = carousel.style.left;
if (i > 0) {
carousel.style.left = (parseInt(left) + 100) + "%";
i--;
} else if (i == 0) {
carousel.style.left = -parseInt(carousel.style.width) + 100 + "%";
i = len - 1;
}
};
}());
</script>
</body>
</html>
点击下面的两个按钮,就会出现轮播效果:
css3的出现真的给前端开发者(特别是像我这样的初级者)带来很多好处,以前要制作一些动画,用flash或者用js写一大堆代码才能实现,现在的css3可能就用简单几行代码加上简单的的几行js代码就能实现。
CSS3图片轮播效果的更多相关文章
- jQuery个性化图片轮播效果
jQuery个性化图片轮播效果 购物产品展示:图片轮播器<效果如下所示> 思路说明: 每隔一段时间,实现图片的自动切换及选项卡选中效果,鼠标划入图片动画停止,划出或离开动画开始 两个区域: ...
- 基于css3的轮播效果
花了一上午来调整页面在ie10上的显示问题,sass编译生成的css文件在ie内核下一直不能正确加载,果然兼容性的问题还需要好好研究.转入正题,用css3实现轮播效果主要是基于css3的framewo ...
- js实现淘宝首页图片轮播效果
原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...
- 超实用的JavaScript代码段 Item3 --图片轮播效果
图片轮播效果 图片尺寸 统一设置成:490*170px; 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒 ...
- JQ 实现轮播图(3D旋转图片轮播效果)
轮播图效果如下: 代码: <!DOCTYPE html> <html xmlns="/www.w3.org/1999/xhtml"> <head> ...
- ios图片轮播效果
代码地址如下:http://www.demodashi.com/demo/11959.html ImageCarousel 简单封装的图片轮播器 内存过大由于我加载的图片分辨率较高(4k) 文件目录 ...
- axure 动态面板实现图片轮播效果(淘宝)
淘宝中经常可以看到店铺中的图片轮播效果,本经验将通过axure7.0实现 工具/原料 axure7.0 方法/步骤 下载需要轮播的图片 将图片引入至axure中,将引入的第一张图片转为 ...
- WPF3D图片轮播效果
原文:WPF3D图片轮播效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/68059169 ...
- js图片轮播效果实现代码
首先给大家看一看js图片轮播效果,如下图 具体思路: 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒钟i ...
随机推荐
- 【小白的java成长系列】——顶级类Object源代码分析
首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~ java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetw ...
- Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释
看资料的时候常常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家: 这些术语都是指屏幕的分辨率. VGA:Video Graphics Array,即:显示画图矩阵,相当于640×480 ...
- javascript有用小技巧—实现分栏显示
记得给师哥师姐測试考试系统的时候,看到他们的考试页面能够实现隐藏左边的考生信息部分,当时认为好高大上.好人性化. 如今学了javascript,我也能实现这个功能了,以下来显摆一下. 1.页面设计: ...
- EL字符串表达式和常用功能用途拦截
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> ${wj ...
- [LeetCode55]Jump Game
题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...
- android登陆接口调试
最近项目要开始调API,于是自己写了个关于登陆界面调试的Demo,为了保护项目,接口文档里面的内容都是被我改过的,不涉及任何项目内容.当然,代码在运行成功后,上传至博客前,相应内容我也根据改过后的文档 ...
- 警报C++精密整数除法计算损失
非常偶然发现了一个精度损失的问题,简单来说: 有表达式: l = i/30 + j/40 + k/25, 求当{i,j,k} = {50,85,27}时l的值,非常easy,用计算器立即能够算出答案为 ...
- 如何更改IE查看源代码菜单使用的HTML编辑器
一:打开注册表。 二:打开"HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/INTERNET EXPLORER"或"HKEY_LOCAL_MAC ...
- openSUSE 国内镜像摘要
1. 北交(BJTU): http://mirror.bjtu.edu.cn/opensuse http://mirror.bjtu.edu.cn/packman/suse 2. 华中科大(HUST) ...
- poj2112 Optimal Milking --- 最大流量,二分法
nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...