原生Javascript实现图片轮播效果

首先引入js运动框架

 1 function getStyle(obj,name){
 2         if(obj.currentStyle){
 3             return obj.currentStyle[name];
 4         } else{
 5             return getComputedStyle(obj,false)[name];
 6         }
 7     }
 8
 9 function startMove(obj, json, fnEnd) {
10     clearInterval(obj.timer);
11     obj.timer = setInterval(function() {
12         var bStop = true;
13         for (var attr in json) {
14             var cur = 0;
15             if (attr == "opacity") {
16                 cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
17             } else {
18                 cur = parseInt(getStyle(obj, attr))
19             }
20             var speed = (json[attr] - cur) / 10;
21             speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
22             if (cur !== json[attr]) {
23                 bStop = false;
24             };
25             if (attr == "opacity") {
26                 obj.style.opacity = (speed + cur) / 100;
27                 obj.style.filter = ‘alpha(opacity:‘ + (speed + cur) + ‘)‘;
28             } else {
29                 obj.style[attr] = cur + speed + ‘px‘;
30             }
31         }
32         if (bStop) {
33             clearInterval(obj.timer);
34             if (fnEnd) fnEnd();
35         }
36     }, 30)
37 }

然后写轮播小案例

  1 <!DOCTYPE html>
  2 <html lang="en">
  3
  4 <head>
  5     <meta charset="UTF-8">
  6     <title>淘宝轮播</title>
  7     <style>
  8     ul,
  9     li {
 10         list-style: none;
 11         margin: 0;
 12         padding: 0;
 13     }
 14
 15     #wrap {
 16         width: 400px;
 17         height: 225px;
 18         margin: 0 auto;
 19         position: relative;
 20         overflow: hidden;
 21     }
 22
 23     li {
 24         float: left;
 25     }
 26
 27     #tips li {
 28         margin: 5px;
 29         border: 1px solid #f60;
 30         width: 20px;
 31         height: 20px;
 32         line-height: 20px;
 33         text-align: center;
 34         color: white;
 35         cursor: pointer;
 36     }
 37
 38     .active {
 39         background: #f60;
 40     }
 41
 42     img {
 43         vertical-align: top;
 44         width: 400px;
 45     }
 46
 47     #content {
 48         width: 2400px;
 49         position: absolute;
 50         left: -1200px;
 51     }
 52
 53     #content li {
 54         float: left;
 55     }
 56
 57     #tips {
 58         position: absolute;
 59         right: 20px;
 60         bottom: 5px;
 61     }
 62     </style>
 63 </head>
 64
 65 <body>
 66     <div id="wrap">
 67         <ul id="content">
 68             <li><img src="img3/1.jpg" ></li>
 69             <li><img src="img3/2.jpg" ></li>
 70             <li><img src="img3/3.jpg" ></li>
 71             <li><img src="img3/4.jpg" ></li>
 72             <li><img src="img3/5.jpg" ></li>
 73             <li><img src="img3/6.jpg" ></li>
 74         </ul>
 75         <ul id="tips">
 76             <li>1</li>
 77             <li>2</li>
 78             <li>3</li>
 79             <li>4</li>
 80             <li>5</li>
 81         </ul>
 82     </div>
 83     <script src="move.js"></script>
 84     <script>
 85     var wrap = document.getElementById(‘wrap‘);
 86     var content = document.getElementById(‘content‘);
 87     var tips = document.getElementById(‘tips‘);
 88     var aLi = tips.getElementsByTagName(‘li‘);
 89     var now = 0;
 90     //var
 91     for (var i = 0; i < aLi.length; i++) {
 92         aLi[0].className = ‘active‘;                //把初始状态定义好
 93         content.style.left = 0 +‘px‘;
 94         aLi[i].index = i; //自定义属性
 95         aLi[i].onclick = function() {
 96             now = this.index;
 97             play();
 98         }
 99     }
100
101     function play() {
102         for (var j = 0; j < aLi.length; j++) {
103             aLi[j].className = ‘‘;
104         }
105         aLi[now].className = ‘active‘;
106
107         //this.index = now;                         //反过来写就不对了大兄弟
108         //content.style.left = -400 * this.index + ‘px‘;
109         startMove(content, {
110             left: -400 * now, //你还真别说,json格式就是这么写的
111         });
112     }
113
114     function autoPlay() {
115         now++;
116         if (now == aLi.length) {
117             now = 0;
118         }
119         play();
120     }
121
122     var timer = setInterval(autoPlay, 2000);
123     wrap.onmouseover = function(){                  //这里如果把事件绑定到ul上的话,那么鼠标移入,下面对饮的li会不起作用,
124         clearInterval(timer);                       //因为li的层级比较高,所以应该把事件绑定到大的div上
125     }
126     wrap.onmouseout = function(){
127         timer = setInterval(autoPlay,2000);
128         //setInterval(autoPlay,2000);   不能这么写,凡是开的定时器,必须得赋值,要不然总会多开一个定时器,导致速度加快
129     }
130     </script>
131 </body>
132
133 </html>

最终效果如下图,可实现鼠标翻页,鼠标悬停后停止轮播,

时间: 2024-08-01 11:26:38

原生Javascript实现图片轮播效果的相关文章

原生js实现图片轮播效果

思路:设置父容器(一定宽度,一定高度,相对定位,子容器超出部分进行隐藏),子容器图片并排(浮动,绝对定位,每次点击进行相应的左或右偏移量) 1.html: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Carousel figure</title> 5 <meta charset="utf-8"> 6 <!-- 浏览器标签页显示图标 --> 7 <lin

基于原生js的图片轮播效果简单实现

基本效果如下: 实现了三张图片自动轮播+按键点击切换的效果. 基本思想: 图片轮播的效果和老式电影院的胶片放映形式很相似,在老式的电影院放映中,使用长长的胶片记录影片,胶片上是按顺序排列的一系列图片,通过快速通过放映机放映口,使这些图片产生一个连贯的切换效果,形成了动态的影片.所以,这里图片轮播的形式也可以采用这种方式来形成动画效果. 形式如下图: (黑框即我们的最外层的容器,充当放映机的存在:绿框就是胶片,上面搭载着很多的图片:粉框内即我们要轮播的图片) 从上图出发,我们要做到图片轮播,那么只

jQuery个性化图片轮播效果

购物产品展示:图片轮播器<效果如下所示> 思路说明: 每隔一段时间,实现图片的自动切换及选项卡选中效果 两个区域:   最外层容器区域,如上图红色线框矩形   选项卡区域 两个事件:    鼠标悬浮或鼠标划入mouseover    鼠标离开mouseleave /**大屏广告滚动样式**/ 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF

首页图片轮播效果

<html><head><meta  charset="utf-8" /><title>首页图片轮播效果</title><style type="text/css">* {margin: 0;padding:0;}body {background: #222;}ol{list-style: none;}img {border: 0 none;}#slider { border: 1px soli

CSS3图片轮播效果

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

js实现淘宝首页图片轮播效果

原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>淘宝首页图片轮播效果</title> <style> <!-- * {margin: 0;padding:0;} body

简单的图片轮播效果

用js代码来实现一个简单的图片轮播效果 鼠标移入图片后显示左右箭头按钮,点击就可以实现图片的切换. 以下分别是html代码和js代码,欢迎批评和讨论! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>图片轮播</title> <style> *{padding:0px; margin:0px;

每日一题_JavaScript.利用纯JavaScript Dom Core实现一个图片轮播效果 ?

具体需求:1. 页面加载后每隔2秒自动从轮播图片2. 鼠标悬停或是点击页面中小图片时,大图片自动跟随切换,并且停止轮播3. 鼠标离开小图片时,图片重新开始轮播 实现思路: 具体代码: html <!DOCTYPE html> <html>     <head>         <meta charset="utf-8" />         <title>Js实现图片轮播</title>         <l

Javascript图片轮播效果一秒换一个

/*增加一秒换一个的功能/运用定时器的用法. <html> <head> <meta charset="utf-8"> <style type="text/css"> body,div,ul,li,img{ margin: 0px; padding: 0px; } #menu{ width: 496px; margin: auto; } #head{ border: 1px solid blue; } #head im