首页>>焦点图>>css js 焦点图(2013-09-05)

css js 焦点图

 本例非jquery

css文件可以演示地址看源码

 

css js 焦点图
赞赏支持
立刻微信赞赏支持 关闭

XML/HTML Code复制内容到剪贴板
  1. <SCRIPT type=text/javascript>  
  2. var $ = function (id) {  
  3.     return "string" == typeof id ? document.getElementById(id) : id;  
  4. };  
  5.   
  6. var Extend = function(destination, source) {  
  7.     for (var property in source) {  
  8.         destination[property] = source[property];  
  9.     }  
  10.     return destination;  
  11. }  
  12.   
  13. var CurrentStyle = function(element){  
  14.     return element.currentStyle || document.defaultView.getComputedStyle(element, null);  
  15. }  
  16.   
  17. var Bind = function(object, fun) {  
  18.     var args = Array.prototype.slice.call(arguments).slice(2);  
  19.     return function() {  
  20.         return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));  
  21.     }  
  22. }  
  23.   
  24. var Tween = {  
  25.     Quart: {  
  26.         easeOut: function(t,b,c,d){  
  27.             return -c * ((tt=t/d-1)*t*t*t - 1) + b;  
  28.         }  
  29.     },  
  30.     Back: {  
  31.         easeOut: function(t,b,c,d,s){  
  32.             if (s == undefined) s = 1.70158;  
  33.             return c*((tt=t/d-1)*t*((s+1)*t + s) + 1) + b;  
  34.         }  
  35.     },  
  36.     Bounce: {  
  37.         easeOut: function(t,b,c,d){  
  38.             if ((t/=d) < (1/2.75)) {  
  39.                 return c*(7.5625*t*t) + b;  
  40.             } else if (t < (2/2.75)) {  
  41.                 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;  
  42.             } else if (t < (2.5/2.75)) {  
  43.                 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;  
  44.             } else {  
  45.                 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;  
  46.             }  
  47.         }  
  48.     }  
  49. }  
  50.   
  51.   
  52. //容器对象,滑动对象,切换数量  
  53. var SlideTrans = function(container, slider, count, options) {  
  54.     this._slider = $(slider);  
  55.     this._container = $(container);//容器对象  
  56.     this._timer = null;//定时器  
  57.     this._count = Math.abs(count);//切换数量  
  58.     this._target = 0;//目标值  
  59.     thisthis._t = this._b = this._c = 0;//tween参数  
  60.       
  61.     this.Index = 0;//当前索引  
  62.       
  63.     this.SetOptions(options);  
  64.       
  65.     this.Auto = !!this.options.Auto;  
  66.     this.Duration = Math.abs(this.options.Duration);  
  67.     this.Time = Math.abs(this.options.Time);  
  68.     this.Pause = Math.abs(this.options.Pause);  
  69.     thisthis.Tween = this.options.Tween;  
  70.     thisthis.onStart = this.options.onStart;  
  71.     thisthis.onFinish = this.options.onFinish;  
  72.       
  73.     var bVertical = !!this.options.Vertical;  
  74.     this._css = bVertical ? "top" : "left";//方向  
  75.       
  76.     //样式设置  
  77.     var p = CurrentStyle(this._container).position;  
  78.     p == "relative" || p == "absolute" || (this._container.style.position = "relative");  
  79.     this._container.style.overflow = "hidden";  
  80.     this._slider.style.position = "absolute";  
  81.       
  82.     thisthis.Change = this.options.Change ? this.options.Change :  
  83.         this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;  
  84. };  
  85. SlideTrans.prototype = {  
  86.   //设置默认属性  
  87.   SetOptions: function(options) {  
  88.     this.options = {//默认值  
  89.         Vertical:   true,//是否垂直方向(方向不能改)  
  90.         Auto:       true,//是否自动  
  91.         Change:     0,//改变量  
  92.         Duration:   50,//滑动持续时间  
  93.         Time:       10,//滑动延时  
  94.         Pause:      4000,//停顿时间(Auto为true时有效)  
  95.         onStart:    function(){},//开始转换时执行  
  96.         onFinish:   function(){},//完成转换时执行  
  97.         Tween:      Tween.Quart.easeOut//tween算子  
  98.     };  
  99.     Extend(this.options, options || {});  
  100.   },  
  101.   //开始切换  
  102.   Run: function(index) {  
  103.     //修正index  
  104.     index == undefined && (index = this.Index);  
  105.     index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);  
  106.     //设置参数  
  107.     this._target = -Math.abs(this.Change) * (this.Index = index);  
  108.     this._t = 0;  
  109.     this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);  
  110.     thisthis._c = this._target - this._b;  
  111.       
  112.     this.onStart();  
  113.     this.Move();  
  114.   },  
  115.   //移动  
  116.   Move: function() {  
  117.     clearTimeout(this._timer);  
  118.     //未到达目标继续移动否则进行下一次滑动  
  119.     if (this._c && this._t < this.Duration) {  
  120.         this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));  
  121.         this._timer = setTimeout(Bind(this, this.Move), this.Time);  
  122.     }else{  
  123.         this.MoveTo(this._target);  
  124.         this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));  
  125.     }  
  126.   },  
  127.   //移动到  
  128.   MoveTo: function(i) {  
  129.     this._slider.style[this._css] = i + "px";  
  130.   },  
  131.   //下一个  
  132.   Next: function() {  
  133.     this.Run(++this.Index);  
  134.   },  
  135.   //上一个  
  136.   Previous: function() {  
  137.     this.Run(--this.Index);  
  138.   },  
  139.   //停止  
  140.   Stop: function() {  
  141.     clearTimeout(this._timer); this.MoveTo(this._target);  
  142.   }  
  143. };  
  144. </SCRIPT>  
  145. </head>  
  146. <body style="text-align:center">  
  147.   
  148. <DIV id=idContainer2 class=container>  
  149. <div align="center"><a href="../../archives/2010/11/3725.html"><h2>焦点图效果</h2></a></div>  
  150. <TABLE id=idSlider2 border=0 cellSpacing=0 cellPadding=0>  
  151.   <TBODY>  
  152.   <TR>  
  153.     <TD class=td_f><A href="#" target="_blank"><IMG src="../dandong.png"></A></TD>  
  154.     <TD class=td_f><A href="#" target="_blank"><IMG src="../mohe.png"></A></TD>  
  155.     <TD class=td_f><A href="#" target="_blank"><IMG src="../changbaishan.png"></A></TD>  
  156.    </TR></TBODY></TABLE>  
  157. <UL id=idNum class=num></UL>  
  158. </DIV>  
  159.   
  160. <SCRIPT>  
  161.     var forEach = function(array, callback, thisObject){  
  162.         if(array.forEach){  
  163.             array.forEach(callback, thisObject);  
  164.         }else{  
  165.             for (var i = 0len = array.length; i < len; i++) { callback.call(thisObject, array[i], i, array); }  
  166.         }  
  167.     }  
  168.       
  169.     var st = new SlideTrans("idContainer2", "idSlider2", 3, { Vertical: false });  
  170.       
  171.     var nums = [];  
  172.     //插入数字  
  173.     for(var i = 0n = st._count - 1; i <= n;){  
  174.         (nums[i] = $("idNum").appendChild(document.createElement("li"))).innerHTML = ++i;  
  175.     }  
  176.       
  177.     forEach(nums, function(o, i){  
  178.         o.onmouseover = function(){ o.className = "on"st.Auto = false; st.Run(i); }  
  179.         o.onmouseout = function(){ o.className = ""st.Auto = true; st.Run(); }  
  180.     })  
  181.       
  182.     //设置按钮样式  
  183.     st.onStart = function(){  
  184.         forEach(nums, function(o, i){ o.className = st.Index == i ? "on" : ""; })  
  185.     }  
  186.     st.Run();  
  187. </SCRIPT>  

 


原文地址:http://www.freejs.net/article_jiaodiantu_23.html