CSS3图片轮播效果

原文:CSS3图片轮播效果

  在网页中用到图片轮播效果,单纯的隐藏、显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间。css3的出现,让动画变得不再是问题,而且简单易用。下面介绍我用css3与js写的一个图片轮播效果。
  一般图片轮播就是三四张图片:

<div class="wrap">
    <div class="carousel">
        <div><img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNC5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvREF4OGpkKndIa2VaZm4yS0ZGSW96dUNJZDNveXlnQXB1SWFiUkgwaHVvSSEvYi9ZZGt6cDNuRmZRQUFZcmVsb25rd2Z3QUEmYW1wO2JvPW5nTDJBUUFBQUFBQkFFdyE=.jpg" /></div>
        <div><img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNi5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvYWpPLjRGbGxTYm1aVnpwS1VqUHV5ZGZPNTBvdjBXV1E2Y0UwazBMSXJPdyEvYi9ZY2kyelhvKmN3QUFZZ0ZVMG5va0NBQUEmYW1wO2JvPVl3THFBUUFBQUFBQkFLMCEmYW1wO3JmPXZpZXdlcl80.jpg" /></div>
        <div><img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNi5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvMEhERkNpRkR6YXZ0QnhwQS4zSjNienhtRXpPMk1xbW5DTyo5VXMqczVQQSEvYi9ZVTVVMVhvR2NRQUFZbjNKMEhxaGNRQUEmYW1wO2JvPVRnS2xBUUFBQUFBQkFNOCEmYW1wO3JmPXZpZXdlcl80.jpg" /></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="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNC5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvREF4OGpkKndIa2VaZm4yS0ZGSW96dUNJZDNveXlnQXB1SWFiUkgwaHVvSSEvYi9ZZGt6cDNuRmZRQUFZcmVsb25rd2Z3QUEmYW1wO2JvPW5nTDJBUUFBQUFBQkFFdyE=.jpg" /></div>
        <div><img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNi5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvYWpPLjRGbGxTYm1aVnpwS1VqUHV5ZGZPNTBvdjBXV1E2Y0UwazBMSXJPdyEvYi9ZY2kyelhvKmN3QUFZZ0ZVMG5va0NBQUEmYW1wO2JvPVl3THFBUUFBQUFBQkFLMCEmYW1wO3JmPXZpZXdlcl80.jpg" /></div>
        <div><img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvYjIwNi5waG90by5zdG9yZS5xcS5jb20vcHN1Py80MWU0MzQ2ZS01ZDYwLTRhM2UtOGFmOS0wNDkyZGQ2ZjBlNTYvMEhERkNpRkR6YXZ0QnhwQS4zSjNienhtRXpPMk1xbW5DTyo5VXMqczVQQSEvYi9ZVTVVMVhvR2NRQUFZbjNKMEhxaGNRQUEmYW1wO2JvPVRnS2xBUUFBQUFBQkFNOCEmYW1wO3JmPXZpZXdlcl80.jpg" /></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>

View Code

  点击下面的两个按钮,就会出现轮播效果:

上一张下一张

  css3的出现真的给前端开发者(特别是像我这样的初级者)带来很多好处,以前要制作一些动画,用flash或者用js写一大堆代码才能实现,现在的css3可能就用简单几行代码加上简单的的几行js代码就能实现。

时间: 2024-10-22 04:30:51

CSS3图片轮播效果的相关文章

用JS实现图片轮播效果代码(一)_javascript技巧

一.实现原理 (1)将所有图片放在一个父容器div里面,通过display属性来设置图片的出现与隐藏: (2)轮播图分为手动轮播和自动轮播: 手动轮播的重点是每次点击图片下方的小圆圈,获得它的索引号,并让与之对应索引号的图片显示,并且此时的小圆圈为高亮显示: 自动轮播:利用定时器setInterval(),来每隔一定的时间来播放一次图片. (3)所有的基础知识:dom操作,定时器,事件运用. 二.轮播图页面布局: <div id="content"> <!-- 总的父

js图片轮播效果实现代码_javascript技巧

首先给大家看一看js图片轮播效果,如下图 具体思路: 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒钟index递增一次.调用一次切换图片函数提示: 1. index不能一直无限制的递增下去,需做判断 2.调用切换图片函数时需将递增之后的index作为参数传过去 三.定义图片切换函数提示:   1.遍历所有放数字索引的li,将每个li上的类去掉.   2.根据传递过来的index值找到对应的li给它添

js实现图片轮播效果_javascript技巧

本文实例讲解了js实现图片轮播效果代码,分享给大家供大家参考,具体内容如下 运行代码如下 具体代码如下 插件是基于jQuery写的,主要实现的功能:自动播放.鼠标悬停.左右箭头控制+禁止点击 CSS样式: <style> .cooperation-box { position: relative; height: 91px; border-bottom: 1px solid #E0DED9; overflow: hidden; } .cooperation { position: relati

javascript实现图片轮播效果_javascript技巧

本文实例介绍了javascript实现图片轮播效果的详细代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> *{ margin: 0

android中的webview不能正常显示获取到的网页的图片轮播效果

问题描述 android中的webview不能正常显示获取到的网页的图片轮播效果 写了一个Android客户端软件,里边有个webview控件,获取到服务端的网页时出问题了. 网页上有个类似于HeadView的图片轮播效果,但是在客户端webview中不能正常显示. 解决方案 那你能将代码贴出来吗,这样猜不好猜的http://www.codesky.net/showhtml/26836.htm 上面的链接是一个关于webview显示获取到的网页图片轮播效果的源代码,你可以下载下来看看,然后找出自

jQuery实现的图片轮播效果完整示例_jquery

本文实例讲述了jQuery实现的图片轮播效果.分享给大家供大家参考,具体如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>图片轮播</title> <style type="text/css"> *{ padding: 0; margin: 0;} li{ list-

JS实现简易图片轮播效果的方法_javascript技巧

本文实例讲述了JS实现简易图片轮播效果的方法.分享给大家供大家参考.具体如下: 这里使用JS制作简易图片轮播效果: 制作比较粗糙,使用的图片是width:660ppx,height:550px; 效果图如下: 代码部分如下: <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; char

用C#做图片轮播效果

用C#做图片轮播效果                                         老帅   在C#中做图片轮播效果,不借助第三方控件,也是可以实现的.使用PictureBox作为图片展示容器就可以.但是图片列表放在什么地方,如何加载,需要考虑一下!    1.首先排除ImageList    因为ImageList中的图片尺寸有限制,最大尺寸为256*256,而我们要显示的图片往往尺寸很大,并且不规则.        2.考虑把图片作为资源文件使用       3.用Pict

Bootstrap3制作图片轮播效果_javascript技巧

先来看看Bootstrap图片轮播效果: 上面就是为大家分享的效果,不过这是网易云音乐的首页. 这样的效果记得最先在ios7的官方控件库中出现之后安卓也在某个版本加入了这个view,设计是通用的啊..bootstrap3也支持在web中使用这样的效果. 接下来进行简单分析: 一 . 结构分析 一个轮播图片主要包括三个部分: 轮播的图片 轮播图片的计数器 轮播图片的控制器 第一步:设计轮播图片的容器.在 Bootstrap 框架中采用 carousel 样式,并且给这个容器定义一个 ID 值,方便