1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3
4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <title>水平轮播图</title>
8 <meta name="author" content="Administrator" />
9 <!-- Date: 2014-12-16 -->
10 <style>
11 *{margin:0;padding:0;font-size:13px;font-family: microsoft yahei}
12 li{list-style:none}
13 #wrap{width:470px;height:150px;margin:40px auto; }
14 #packet{width:470px;height:150px;overflow:hidden;position:relative}
15 #packet ul{ position:absolute;top:0;left:0}
16 #slide li{ width:470px;height:150px;position:relative;top:0;left:0;float:left }
17 #packet ol{position:absolute;right:5px;bottom:5px;}
18 #packet ol li{width:20px;height:20px;text-align:center;line-height:20px;background:orange; float: left;margin:0 2px}
19 #packet ol li.active{background:#E54829}
20
21 </style>
22 <!-- Date: 2014-12-15 -->
23 <script src="../../../tween.js"></script>
24 <script>
25 window.onload=function(){
26 var oPacket=document.getElementById('packet');
27 var oUl=document.getElementById('slide');
28 var aLi=oUl.getElementsByTagName('li');
29 var timer=null;
30 var iNow=0;
31 var iNow2=0;
32
33 // moveWithTime(oUl,{'top':-150},2000);
34
35 oUl.style.width = aLi[0].offsetWidth*aLi.length +'px';
36
37 /**ol创建**/
38 var oL=document.createElement('ol');
39 var str='';
40 for(var i=0;i<aLi.length;i++){
41 str+='<li>'+(i+1)+'</li>';
42 }
43 oL.innerHTML=str;
44 oPacket.appendChild(oL);
45 var aLi1=oL.getElementsByTagName('li');
46 aLi1[0].className='active';
47
48 for(var i=0;i<aLi1.length;i++){
49 aLi1[i].index=i;
50 aLi1[i].onmouseover=function(){
51
52 for(var i=0;i<aLi1.length;i++){
53 aLi1[i].className=''
54 }
55 this.className='active';
56 startMove(oUl,{'left':-470*this.index});
57 iNow=this.index;
58 iNow2=this.index;
59
60 clearInterval(timer);
61 }
62 aLi1[i].onmouseout=function(){
63 timer=setInterval(toRun,2000);
64 }
65 }
66
67
68 timer=setInterval(toRun,2000);
69
70 function toRun(){
71 if(iNow==aLi.length-1){
72 iNow=0;
73 aLi[0].style.position='relative';
74 aLi[0].style.left=470 * aLi.length +'px'
75 }else{
76 iNow++
77 }
78 iNow2++;
79
80 for(var i=0;i<aLi1.length;i++){
81 aLi1[i].className=''
82 }
83 aLi1[iNow].className='active';
84
85 startMove(oUl,{'left':-470*iNow2},function(){
86 clearInterval(timer);
87 timer=setInterval(toRun,2000);
88 if(iNow==0){
89 aLi[0].style.position='static';
90 oUl.style.left=0;
91 iNow2=0
92 }
93 })
94 }
95
96
97
98 }
99
100 /**时间版运动框架 结合Tweens()函数 可实现各种运动 匀速,加速,减速等 **/
101 function startMove(obj,json,times,fx,fn){
102
103 var iCur = {};
104 var startTime = nowTime();
105
106 if( typeof times == 'undefined' ){
107 times = 400;
108 fx = 'linear';
109 }
110
111 if( typeof times == 'string' ){
112 if(typeof fx == 'function'){
113 fn = fx;
114 }
115 fx = times;
116 times = 400;
117 }
118 else if(typeof times == 'function'){
119 fn = times;
120 times = 400;
121 fx = 'linear';
122 }
123 else if(typeof times == 'number'){
124 if(typeof fx == 'function'){
125 fn = fx;
126 fx = 'linear';
127 }
128 else if(typeof fx == 'undefined'){
129 fx = 'linear';
130 }
131 }
132
133 for(var attr in json){
134 iCur[attr] = 0;
135 if( attr == 'opacity' ){
136 iCur[attr] = Math.round(getStyle(obj,attr)*100);
137 }
138 else{
139 iCur[attr] = parseInt(getStyle(obj,attr));
140 }
141 }
142
143 clearInterval(obj.timer);
144 obj.timer = setInterval(function(){
145
146 var changeTime = nowTime();
147
148 //startTime changeTime
149
150 var scale = 1-Math.max(0,startTime + times - changeTime)/times; //2000 - 0 -> 1-0 -> 0-1
151
152 for(var attr in json){
153
154 var value = Tween[fx](scale*times,iCur[attr],json[attr] - iCur[attr],times);
155
156 if(attr == 'opacity'){
157 obj.style.filter = 'alpha(opacity='+ value +')';
158 obj.style.opacity = value/100;
159 }
160 else{
161 obj.style[attr] = value + 'px';
162 }
163
164 }
165
166 if(scale == 1){
167 clearInterval(obj.timer);
168 if(fn){
169 fn.call(obj);
170 }
171 }
172
173
174 },30);
175
176
177 function nowTime(){
178 return (new Date()).getTime();
179 }
180
181
182 }
183
184 function getStyle(obj,attr){
185 if(obj.currentStyle){
186 return obj.currentStyle[attr];
187 }
188 else{
189 return getComputedStyle(obj,false)[attr];
190 }
191 }
192
193
194 var Tween = {
195 linear: function (t, b, c, d){ //匀速
196 return c*t/d + b;
197 },
198 easeIn: function(t, b, c, d){ //加速曲线
199 return c*(t/=d)*t + b;
200 },
201 easeOut: function(t, b, c, d){ //减速曲线
202 return -c *(t/=d)*(t-2) + b;
203 },
204 easeBoth: function(t, b, c, d){ //加速减速曲线
205 if ((t/=d/2) < 1) {
206 return c/2*t*t + b;
207 }
208 return -c/2 * ((--t)*(t-2) - 1) + b;
209 },
210 easeInStrong: function(t, b, c, d){ //加加速曲线
211 return c*(t/=d)*t*t*t + b;
212 },
213 easeOutStrong: function(t, b, c, d){ //减减速曲线
214 return -c * ((t=t/d-1)*t*t*t - 1) + b;
215 },
216 easeBothStrong: function(t, b, c, d){ //加加速减减速曲线
217 if ((t/=d/2) < 1) {
218 return c/2*t*t*t*t + b;
219 }
220 return -c/2 * ((t-=2)*t*t*t - 2) + b;
221 },
222 elasticIn: function(t, b, c, d, a, p){ //正弦衰减曲线(弹动渐入)
223 if (t === 0) {
224 return b;
225 }
226 if ( (t /= d) == 1 ) {
227 return b+c;
228 }
229 if (!p) {
230 p=d*0.3;
231 }
232 if (!a || a < Math.abs(c)) {
233 a = c;
234 var s = p/4;
235 } else {
236 var s = p/(2*Math.PI) * Math.asin (c/a);
237 }
238 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
239 },
240 elasticOut: function(t, b, c, d, a, p){ //正弦增强曲线(弹动渐出)
241 if (t === 0) {
242 return b;
243 }
244 if ( (t /= d) == 1 ) {
245 return b+c;
246 }
247 if (!p) {
248 p=d*0.3;
249 }
250 if (!a || a < Math.abs(c)) {
251 a = c;
252 var s = p / 4;
253 } else {
254 var s = p/(2*Math.PI) * Math.asin (c/a);
255 }
256 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
257 },
258 elasticBoth: function(t, b, c, d, a, p){
259 if (t === 0) {
260 return b;
261 }
262 if ( (t /= d/2) == 2 ) {
263 return b+c;
264 }
265 if (!p) {
266 p = d*(0.3*1.5);
267 }
268 if ( !a || a < Math.abs(c) ) {
269 a = c;
270 var s = p/4;
271 }
272 else {
273 var s = p/(2*Math.PI) * Math.asin (c/a);
274 }
275 if (t < 1) {
276 return - 0.5*(a*Math.pow(2,10*(t-=1)) *
277 Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
278 }
279 return a*Math.pow(2,-10*(t-=1)) *
280 Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b;
281 },
282 backIn: function(t, b, c, d, s){ //回退加速(回退渐入)
283 if (typeof s == 'undefined') {
284 s = 1.70158;
285 }
286 return c*(t/=d)*t*((s+1)*t - s) + b;
287 },
288 backOut: function(t, b, c, d, s){
289 if (typeof s == 'undefined') {
290 s = 3.70158; //回缩的距离
291 }
292 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
293 },
294 backBoth: function(t, b, c, d, s){
295 if (typeof s == 'undefined') {
296 s = 1.70158;
297 }
298 if ((t /= d/2 ) < 1) {
299 return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
300 }
301 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
302 },
303 bounceIn: function(t, b, c, d){ //弹球减振(弹球渐出)
304 return c - Tween['bounceOut'](d-t, 0, c, d) + b;
305 },
306 bounceOut: function(t, b, c, d){
307 if ((t/=d) < (1/2.75)) {
308 return c*(7.5625*t*t) + b;
309 } else if (t < (2/2.75)) {
310 return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b;
311 } else if (t < (2.5/2.75)) {
312 return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b;
313 }
314 return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b;
315 },
316 bounceBoth: function(t, b, c, d){
317 if (t < d/2) {
318 return Tween['bounceIn'](t*2, 0, c, d) * 0.5 + b;
319 }
320 return Tween['bounceOut'](t*2-d, 0, c, d) * 0.5 + c*0.5 + b;
321 }
322 }
323
324
325 </script>
326 </head>
327 <body>
328 <div id="wrap">
329 <div id="packet">
330 <ul id="slide">
331 <li><img src="images/1.jpg"/></li>
332 <li><img src="images/2.jpg"/></li>
333 <li><img src="images/3.jpg"/></li>
334 <li><img src="images/4.jpg"/></li>
335 <li><img src="images/5.jpg"/></li>
336 </ul>
337 </div>
338 </div>
339 </body>
340 </html>