图片滑动slider
代码非原创,自己有改动
当改为垂直切换时,要将container的width设为一张图片的宽度,此时图片的排列是垂直的,切换时才会一张换一张
| <style type="text/css"> | |
| .main {margin:0; padding:0;width:300px; height:140px; position:relative;overflow: hidden;} | |
| .container, .container *{margin:0; padding:0;} | |
| .container{width:1500px; height:140px; position:relative;} | |
| .slider{position:relative;} | |
| .slider li{ | |
| list-style:none; | |
| list-style-image:inherit; | |
| display:block; | |
| float: left; | |
| color: #004985; | |
| text-align: center; | |
| line-height: 20px; | |
| font-size: 16px; | |
| cursor:pointer; | |
| overflow:hidden; | |
| // background-color: #ddd; | |
| } | |
| .slider img{ width:300px; height:120px; display:block;border:0;list-style: none;} | |
| .num{ position:absolute; width: 600px;left:5px; bottom:0px;} | |
| .num li{ | |
| float: left; | |
| list-style:none; | |
| color: #004985; | |
| text-align: center; | |
| line-height: 20px; | |
| width: 20px; | |
| height: 20px; | |
| font-family: Arial; | |
| font-size: 20px; | |
| cursor: pointer; | |
| overflow: hidden; | |
| margin-right: 245px; | |
| filter:alpha(opacity=80); | |
| -moz-opacity:0.8; | |
| } | |
| </style> |
| <div class="main"> | |
| <div class="container" id="idTransformView"> | |
| <ul class="slider" id="idSlider"> | |
| <li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7014642654D5.jpg" /></a>111嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷</li> | |
| <li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/77B454E7A235.jpg" /></a>222鹅鹅鹅饿鹅鹅鹅鹅鹅鹅饿</li> | |
| <li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7640478553BB.jpg" /></a>333呵呵呵呵呵呵呵呵呵呵</li> | |
| <li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/729334C3EC1C.jpg" /></a>444啊啊啊啊啊啊啊啊啊</li> | |
| <li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7DB324EF4FC5.jpg" /></a>555哦哦哦哦哦哦哦哦哦哦</li> | |
| </ul> | |
| <ul class="num" id="idNum"> | |
| <li>←</li> | |
| <li>→</li> | |
| </ul> | |
| </div> | |
| </div> |
| <script type="text/javascript"> | |
| var $$ = function (id) { | |
| return "string" == typeof id ? document.getElementById(id) : id; | |
| }; | |
| var Class = { | |
| create: function() { | |
| return function() { | |
| this.initialize.apply(this, arguments); | |
| } | |
| } | |
| } | |
| Object.extend = function(destination, source) { | |
| for (var property in source) { | |
| destination[property] = source[property]; | |
| } | |
| return destination; | |
| } | |
| var TransformView = Class.create(); | |
| TransformView.prototype = { | |
| //容器对象,滑动对象,切换参数,切换数量 | |
| initialize: function(container, slider, parameter, count, options) { | |
| if(parameter <= 0 || count <= 0) return; | |
| var oContainer = $$(container), oSlider = $$(slider), oThis = this; | |
| this.Index = 0;//当前索引 | |
| this._timer = null;//定时器 | |
| this._slider = oSlider;//滑动对象 | |
| this._parameter = parameter;//切换参数 | |
| this._count = count || 0;//切换数量 | |
| this._target = 0;//目标参数 | |
| this.SetOptions(options); | |
| this.Up = !!this.options.Up; | |
| this.Step = Math.abs(this.options.Step); | |
| this.Time = Math.abs(this.options.Time); | |
| this.Auto = !!this.options.Auto; | |
| this.Pause = Math.abs(this.options.Pause); | |
| this.onStart = this.options.onStart; | |
| this.onFinish = this.options.onFinish; | |
| oContainer.style.overflow = "hidden"; | |
| oContainer.style.position = "relative"; | |
| oSlider.style.position = "absolute"; | |
| oSlider.style.top = oSlider.style.left = 0; | |
| }, | |
| //设置默认属性 | |
| SetOptions: function(options) { | |
| this.options = {//默认值 | |
| Up: false,//是否向上(否则向左) | |
| Step: 10,//滑动变化率 | |
| Time: 10,//滑动延时 | |
| Auto: true,//是否自动转换 | |
| Pause: 2000,//停顿时间(Auto为true时有效) | |
| onStart: function(){},//开始转换时执行 | |
| onFinish: function(){}//完成转换时执行 | |
| }; | |
| Object.extend(this.options, options || {}); | |
| }, | |
| //开始切换设置 | |
| Start: function() { | |
| if(this.Index < 0){ | |
| this.Index = this._count - 1; | |
| } else if (this.Index >= this._count){ this.Index = 0; } | |
| this._target = -1 * this._parameter * this.Index; | |
| this.onStart(); | |
| this.Move(); | |
| }, | |
| //移动 | |
| Move: function() { | |
| clearTimeout(this._timer); | |
| var oThis = this, style = this.Up ? "top" : "left", iNow = parseInt(this._slider.style[style]) || 0, iStep = this.GetStep(this._target, iNow); | |
| if (iStep != 0) { | |
| this._slider.style[style] = (iNow + iStep) + "px"; | |
| this._timer = setTimeout(function(){ oThis.Move(); }, this.Time); | |
| } else { | |
| this._slider.style[style] = this._target + "px"; | |
| this.onFinish(); | |
| if (this.Auto) { this._timer = setTimeout(function(){ oThis.Index++; oThis.Start(); }, this.Pause); } | |
| } | |
| }, | |
| //获取步长 | |
| GetStep: function(iTarget, iNow) { | |
| var iStep = (iTarget - iNow) / this.Step; | |
| if (iStep == 0) return 0; | |
| if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1); | |
| return iStep; | |
| }, | |
| //停止 | |
| Stop: function(iTarget, iNow) { | |
| clearTimeout(this._timer); | |
| this._slider.style[this.Up ? "top" : "left"] = this._target + "px"; | |
| } | |
| }; | |
| window.onload=function(){ | |
| this._pinNum = 5; //图数 | |
| this._movNum = 300; //距离 | |
| function Each(list, fun){ | |
| for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } | |
| }; | |
| var objs = $$("idNum").getElementsByTagName("li"); | |
| var tv = new TransformView("idTransformView", "idSlider",this._movNum,this._pinNum , { | |
| onStart : function(){ Each(objs, function(o, i){ o.className = tv.Index ? "on" : ""; }) }//按钮样式 | |
| }); | |
| tv.Start(); | |
| Each(objs, function(o, i){ | |
| o.onclick = function(){ | |
| o.className = "on"; | |
| tv.Auto = true; | |
| //tv.Index = i; | |
| if(i == 0){tv.Index -=1;} | |
| else if(i == 1){tv.Index += 1;} | |
| tv.Start(); | |
| } | |
| o.onmouseout = function(){ | |
| o.className = ""; | |
| tv.Auto = true; | |
| tv.Start(); | |
| } | |
| }) | |
| } | |
| if (Object.prototype.toJSONString){ | |
| var oldToJSONString = Object.toJSONString; | |
| Object.prototype.toJSONString = function(){ | |
| if (arguments.length > 0){ | |
| return false; | |
| }else{ | |
| return oldToJSONString.apply(this, arguments); | |
| } | |
| } | |
| } | |
| </script> |
num里的li本来是放数字的,我给改成左右箭头切换了,原来js是这样的
| window.onload=function(){ | |
| this._pinNum = 5; //图数 | |
| this._movNum = 126; //距离 | |
| function Each(list, fun){ | |
| for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } | |
| }; | |
| var objs = $("idNum").getElementsByTagName("li"); | |
| var tv = new TransformView("idTransformView", "idSlider",this._movNum,this._pinNum , { | |
| onStart : function(){ Each(objs, function(o, i){ o.className = tv.Index == i ? "on" : ""; }) }//按钮样式 | |
| }); | |
| tv.Start(); | |
| Each(objs, function(o, i){ | |
| o.onmouseover = function(){ | |
| o.className = "on"; | |
| tv.Auto = true; | |
| tv.Index = i; | |
| tv.Start(); | |
| } | |
| o.onmouseout = function(){ | |
| o.className = ""; | |
| tv.Auto = true; | |
| tv.Start(); | |
| } | |
| }) | |
| } |
因为我要放在wap上运行,所以onmouseover有点不好控制,给改成onclick了

浙公网安备 33010602011771号