• 图片切换.so屌


      1 <!doctype html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>Document</title>
      6 <style type="text/css">
      7 body,div,ul,li {
      8     margin: 0;
      9     padding: 0;
     10 }
     11 ul,li {
     12     list-style: none;
     13 }
     14 a img {
     15     border: none;
     16 }
     17 .wrap {
     18      100%;
     19     overflow: hidden;
     20     position: relative;
     21 }
     22 .wrap .prev,
     23 .wrap .next  {
     24     height: 320px;
     25     position: absolute;
     26     left: -50%;
     27     top: 0;
     28     background-color: #999;
     29     opacity: 0.7;
     30      100%;
     31 }
     32 .wrap .next {
     33     left: auto;
     34     right: -50%;
     35 }
     36 .wrap .prev:hover,
     37 .wrap .next:hover {
     38     opacity: 0.5;
     39 }
     40 .container {
     41      100%;
     42     height: 320px;
     43 }
     44 .container ul {
     45     height: 100%;
     46 }
     47 .container li {
     48      1000px;
     49     height: 100%;
     50     float: left;
     51 }
     52 .container li a,
     53 .container li img {
     54     display: block;
     55      100%;
     56     height: 100%;
     57 }
     58 .page {
     59     position: absolute;
     60     left: 50%;
     61     bottom: 10px;
     62     display:none;
     63 }
     64 .page span {
     65     float: left;
     66     margin-right: 10px;
     67      20px;
     68     height: 20px;
     69     display: block;
     70     cursor: pointer;
     71     background: #999;
     72     border-radius: 50%;
     73     text-align: center;
     74     color: #fff;
     75 }
     76 .page .select {
     77     background: #f00;
     78 }
     79 </style>
     80 </head>
     81 <body>
     82 <div class="wrap">
     83     <div class="container" id="container">
     84         <ul>
     85             <li><a href="1"><img src="http://www.hengqijy.com/uploadfile/2013/1031/20131031084228263.jpg"></a> </li>
     86             <li><a href="2"><img src="http://www.hengqijy.com/uploadfile/2014/0315/20140315023711196.jpg"></a></li>
     87             <li><a href="3"><img src="http://www.hengqijy.com/uploadfile/2014/0228/20140228091207797.jpg"></a></li>
     88             <li><a href="4"><img src="http://www.hengqijy.com/statics/images/new_img/ksss.jpg"></a></li>
     89         </ul>
     90     </div>
     91     <div class="prev" id="prev"></div>
     92     <div class="next" id="next"></div>
     93     <div id="page" class="page"></div>
     94 </div>
     95 <script type="text/javascript">
     96 /*
     97 * Slider constructor
     98 * @param {Node}  ele  容器节点
     99 * @param {Int} index 默认显示第几张
    100 */
    101 var Slider = function(ele, autoInterval){
    102     autoInterval = parseInt(autoInterval, 10);
    103     this.autoInterval = !isNaN(autoInterval) && Math.abs(autoInterval) ||  3000;
    104     this.ele = ele;    
    105     this.oList = ele.children[0];
    106     this.items = this.oList.getElementsByTagName("li");
    107     this.itemWidth = parseInt(this.items[0].offsetWidth, 10);
    108     this.page = document.getElementById("page");
    109     this.prevBtn = document.getElementById("prev");
    110     this.nextBtn = document.getElementById("next");
    111     this.init();
    112 }
    113 Slider.prototype = {
    114     constructor: Slider,
    115     init: function(){
    116         this.oList.style.position = 'absolute';
    117         this.oList.style.top = 0;
    118         this.oList.style.left = 0;
    119 
    120         this.going = 0;
    121         this.current = 1;
    122         this.speed = 100;
    123         this.timer = null;
    124         this.inter = null;
    125         this.lock = false;
    126         this.wrapWidth = parseInt(this.ele.offsetWidth, 10);
    127         this.pageCircles = null;
    128 
    129         this.prevBtn.style.marginLeft = -this.itemWidth/2 + 'px';
    130         this.nextBtn.style.marginRight = -this.itemWidth/2 + 'px';
    131 
    132         if(this.items.length > 2) {
    133             this.setUp();
    134         } else {
    135             this.oList.style.left = (this.wrapWidth - this.itemWidth * this.items.length)/2 + 'px';
    136             this.prevBtn.style.display = "none";
    137             this.nextBtn.style.display = "none";
    138         }
    139 
    140         this.oList.style.width = this.itemWidth * this.items.length + 'px';
    141 
    142     },
    143     setUp:function(){
    144         var    first1 = this.items[0].cloneNode();
    145             first1.innerHTML = this.items[0].innerHTML;
    146 
    147         var first2 = this.items[1].cloneNode();
    148             first2.innerHTML = this.items[1].innerHTML;
    149 
    150         var last1 = this.items[this.items.length-1].cloneNode();
    151             last1.innerHTML = this.items[this.items.length-1].innerHTML;
    152 
    153         var last2 = this.items[this.items.length-2].cloneNode();
    154             last2.innerHTML = this.items[this.items.length-2].innerHTML;
    155 
    156         this.oList.appendChild(first1);
    157         this.oList.appendChild(first2);
    158         this.oList.insertBefore(last1, this.items[0]);
    159         this.oList.insertBefore(last2, this.items[0]);
    160 
    161         this.buildPage();
    162         this.bindEvent();
    163         this.slientGoTo();
    164         this.doAnimate();
    165         this.autoSlider();
    166     },
    167     autoSlider:function(){
    168         var that = this;
    169         if(this.autoInterval > 0) {
    170             this.inter = setInterval(function(){
    171                 that.next();
    172             }, this.autoInterval);
    173         }
    174     },
    175     stopAutoSlider:function(){
    176         clearInterval(this.inter);
    177     },
    178     buildPage:function(){
    179         for(var i = 0,len = this.items.length - 4; i<len; i++) {
    180             var circle = document.createElement('span');
    181             circle.innerHTML = i + 1;
    182             this.page.appendChild(circle);
    183         }
    184         this.pageCircles = this.page.getElementsByTagName('span');
    185         this.addEvent(this.page, 'click', 'gotoIndex');
    186         this.page.style.display = 'block';
    187     },
    188     bindEvent:function(){
    189         this.addEvent(this.prevBtn, 'click', 'prev');
    190         this.addEvent(this.nextBtn, 'click', 'next');
    191         this.addEvent(this.ele, 'mouseover' , 'stopAutoSlider');
    192         this.addEvent(this.ele, 'mouseout' , 'autoSlider');
    193     },
    194     addEvent:function(ele, type, fn, context) {
    195         context = context || this;
    196         var innerFun = function(event) {
    197             var evt = event || window.event;
    198             if(typeof fn === 'string'){
    199                context[fn].call(context, this, evt);
    200             } else {
    201                 fn.call(context, this, evt);
    202             }
    203         }
    204         if(window.addEventListener) {
    205             ele.addEventListener(type, innerFun, false);
    206         } else {
    207             ele.attachEvent('on'+type, innerFun);
    208         }
    209     },
    210     index:function(ele){
    211         var parentNode = ele.parentNode;
    212         var eles = parentNode.getElementsByTagName(ele.tagName);
    213 
    214         for(var i = 0, len = eles.length; i<len; i++){
    215             if(eles[i] == ele) {
    216                 return i;
    217             }
    218         }
    219     },
    220     hasClass: function(obj, cls) {
    221         return !!obj.className && obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
    222     },
    223     addClass: function(obj, cls) {
    224         if (!this.hasClass(obj, cls)) obj.className += " " + cls;
    225     },
    226     removeClass:function (obj, cls) {
    227         if (this.hasClass(obj, cls)) {
    228             var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
    229             obj.className = obj.className.replace(reg, ' ');
    230         }
    231     },
    232     gotoIndex:function(eleContext, evt){
    233         var ele = evt.target || evt.srcElement;
    234         var index = this.index(ele);
    235         if(this.lock){return false;}
    236         if(this.current === this.items.length-4 && index === 0) {
    237             this.current = 0;
    238             this.slientGoTo();
    239         } else if(this.current === 1 && index ===this.items.length-5) {
    240             this.current = this.items.length-3;
    241             this.slientGoTo();
    242         }
    243         this.current = index + 1;
    244         this.doAnimate();
    245     },
    246     prev:function(eleContext, evt){
    247         if(this.lock){return false;}
    248         this.current--;
    249         this.doAnimate();
    250     },
    251     next:function(eleContext, evt){
    252         if(this.lock){return false;}
    253         this.current++;
    254         this.doAnimate();
    255     },
    256     doAnimate:function(){
    257         this.distance = (this.wrapWidth-this.itemWidth*(2*this.current + 3))/2 - parseInt(this.oList.style.left, 10);
    258         if(this.distance < 0){
    259             this.speed = -Math.abs(this.speed);
    260         } else {
    261             this.speed = Math.abs(this.speed);
    262         }
    263         this.distance = Math.abs(this.distance);
    264         this.lock = true;
    265         this.animate();
    266     },
    267     animate:function(){
    268         var that = this;
    269         this.timer = setTimeout(function() {
    270             var left = parseInt(that.oList.style.left, 10) || 0;
    271 
    272             if (that.going+Math.abs(that.speed) >= that.distance) {
    273                 if (that.speed > 0) {
    274                     that.oList.style.left = left + that.distance - that.going + 'px';
    275                 } else {
    276                     that.oList.style.left = left - that.distance + that.going + 'px';
    277                 }
    278                 clearTimeout(that.timer);
    279                 that.going = 0;
    280                 that.onceEnd();
    281             } else {
    282                 that.going += Math.abs(that.speed);
    283                 that.oList.style.left = left + that.speed + 'px';
    284                 that.animate();
    285             }
    286         }, 25);
    287 
    288     },
    289     slientGoTo:function(){
    290         this.oList.style.left = (this.wrapWidth-this.itemWidth*(2*this.current + 3))/2 + 'px';
    291     },
    292     setCircleSelect:function(){
    293         for(var i=0,len = this.pageCircles.length; i<len; i++) {
    294             var ele= this.pageCircles[i];
    295             if(this.hasClass(ele, 'select')) {
    296                 this.removeClass(ele, 'select');
    297             }
    298         }
    299         this.addClass(this.pageCircles[this.current-1], 'select');
    300     },
    301     correctCurrent:function(){
    302         if(this.current === 0) {
    303             this.current = this.items.length - 4;
    304         } else if(this.current === this.items.length - 3) {
    305             this.current = 1;
    306         } else {
    307             return false;
    308         }
    309         this.slientGoTo();
    310     },
    311     onceEnd:function(){
    312         this.lock = false;
    313         this.correctCurrent();
    314         this.setCircleSelect();
    315     }
    316 }
    317 var con = document.getElementById("container");
    318 var s = new Slider(con, 4000);
    319 </script>
    320 </body>
    321 </html>

      1 /*
      2 *2
      3 */
      4 <!doctype html>
      5 <html lang="en">
      6 <head>
      7     <meta charset="UTF-8">
      8     <title>Document</title>
      9 <style type="text/css">
     10 body,div,ul,li {
     11     margin: 0;
     12     padding: 0;
     13 }
     14 ul,li {
     15     list-style: none;
     16 }
     17 a img {
     18     border: none;
     19 }
     20 .wrap {
     21      100%;
     22     overflow: hidden;
     23     position: relative;
     24 }
     25 .wrap .prev,
     26 .wrap .next  {
     27     height: 320px;
     28     position: absolute;
     29     left: -50%;
     30     top: 0;
     31     background-color: #999;
     32     opacity: 0.7;
     33      100%;
     34 }
     35 .wrap .next {
     36     left: auto;
     37     right: -50%;
     38 }
     39 .wrap .prev:hover,
     40 .wrap .next:hover {
     41     opacity: 0.5;
     42 }
     43 .container {
     44      100%;
     45     height: 320px;
     46 }
     47 .container ul {
     48     height: 100%;
     49 }
     50 .container li {
     51      1000px;
     52     height: 100%;
     53     float: left;
     54 }
     55 .container li a,
     56 .container li img {
     57     display: block;
     58      100%;
     59     height: 100%;
     60 }
     61 .page {
     62     position: absolute;
     63     left: 50%;
     64     bottom: 10px;
     65     display:none;
     66 }
     67 .page span {
     68     float: left;
     69     margin-right: 10px;
     70      20px;
     71     height: 20px;
     72     display: block;
     73     cursor: pointer;
     74     background: #999;
     75     border-radius: 50%;
     76     text-align: center;
     77     color: #fff;
     78 }
     79 .page .select {
     80     background: #f00;
     81 }
     82 </style>
     83 </head>
     84 <body>
     85 <div class="wrap">
     86     <div class="container" id="container">
     87         <ul>
     88             <li><a href="1"><img src="http://www.hengqijy.com/uploadfile/2013/1031/20131031084228263.jpg"></a> </li>
     89             <li><a href="2"><img src="http://www.hengqijy.com/uploadfile/2014/0315/20140315023711196.jpg"></a></li>
     90             <li><a href="3"><img src="http://www.hengqijy.com/uploadfile/2014/0228/20140228091207797.jpg"></a></li>
     91             <li><a href="4"><img src="http://www.hengqijy.com/statics/images/new_img/ksss.jpg"></a></li>
     92         </ul>
     93     </div>
     94     <div class="prev" id="prev"></div>
     95     <div class="next" id="next"></div>
     96     <div id="page" class="page"></div>
     97 </div>
     98 <script type="text/javascript">
     99 /*
    100 * Slider constructor
    101 * @param {Node}  ele  容器节点
    102 * @param {Int} index 默认显示第几张
    103 */
    104 var Slider = function(ele, autoInterval){
    105     autoInterval = parseInt(autoInterval, 10);
    106     this.autoInterval = !isNaN(autoInterval) && Math.abs(autoInterval) ||  3000;
    107     this.ele = ele;    
    108     this.oList = ele.children[0];
    109     this.items = this.oList.getElementsByTagName("li");
    110     this.itemWidth = parseInt(this.items[0].offsetWidth, 10);
    111     this.page = document.getElementById("page");
    112     this.prevBtn = document.getElementById("prev");
    113     this.nextBtn = document.getElementById("next");
    114     this.init();
    115 }
    116 Slider.prototype = {
    117     constructor: Slider,
    118     init: function(){
    119         this.oList.style.position = 'absolute';
    120         this.oList.style.top = 0;
    121         this.oList.style.left = 0;
    122 
    123         this.going = 0;
    124         this.current = 1;
    125         this.speed = 100;
    126         this.timer = null;
    127         this.inter = null;
    128         this.lock = false;
    129         this.wrapWidth = parseInt(this.ele.offsetWidth, 10);
    130         this.pageCircles = null;
    131 
    132         this.prevBtn.style.marginLeft = -this.itemWidth/2 + 'px';
    133         this.nextBtn.style.marginRight = -this.itemWidth/2 + 'px';
    134 
    135         if(this.items.length > 2) {
    136             this.setUp();
    137         } else {
    138             this.oList.style.left = (this.wrapWidth - this.itemWidth * this.items.length)/2 + 'px';
    139             this.prevBtn.style.display = "none";
    140             this.nextBtn.style.display = "none";
    141         }
    142 
    143         this.oList.style.width = this.itemWidth * this.items.length + 'px';
    144 
    145     },
    146     setUp:function(){
    147         var    first1 = this.items[0].cloneNode();
    148             first1.innerHTML = this.items[0].innerHTML;
    149 
    150         var first2 = this.items[1].cloneNode();
    151             first2.innerHTML = this.items[1].innerHTML;
    152 
    153         var last1 = this.items[this.items.length-1].cloneNode();
    154             last1.innerHTML = this.items[this.items.length-1].innerHTML;
    155 
    156         var last2 = this.items[this.items.length-2].cloneNode();
    157             last2.innerHTML = this.items[this.items.length-2].innerHTML;
    158 
    159         this.oList.appendChild(first1);
    160         this.oList.appendChild(first2);
    161         this.oList.insertBefore(last1, this.items[0]);
    162         this.oList.insertBefore(last2, this.items[0]);
    163 
    164         this.buildPage();
    165         this.bindEvent();
    166         this.slientGoTo();
    167         this.doAnimate();
    168         this.autoSlider();
    169     },
    170     autoSlider:function(){
    171         var that = this;
    172         if(this.autoInterval > 0) {
    173             this.inter = setInterval(function(){
    174                 that.next();
    175             }, this.autoInterval);
    176         }
    177     },
    178     stopAutoSlider:function(){
    179         clearInterval(this.inter);
    180     },
    181     buildPage:function(){
    182         for(var i = 0,len = this.items.length - 4; i<len; i++) {
    183             var circle = document.createElement('span');
    184             circle.innerHTML = i + 1;
    185             this.page.appendChild(circle);
    186         }
    187         this.pageCircles = this.page.getElementsByTagName('span');
    188         this.addEvent(this.page, 'click', 'gotoIndex');
    189         this.page.style.display = 'block';
    190     },
    191     bindEvent:function(){
    192         this.addEvent(this.prevBtn, 'click', 'prev');
    193         this.addEvent(this.nextBtn, 'click', 'next');
    194         this.addEvent(this.ele, 'mouseover' , 'stopAutoSlider');
    195         this.addEvent(this.ele, 'mouseout' , 'autoSlider');
    196     },
    197     addEvent:function(ele, type, fn, context) {
    198         context = context || this;
    199         var innerFun = function(event) {
    200             var evt = event || window.event;
    201             if(typeof fn === 'string'){
    202                context[fn].call(context, this, evt);
    203             } else {
    204                 fn.call(context, this, evt);
    205             }
    206         }
    207         if(window.addEventListener) {
    208             ele.addEventListener(type, innerFun, false);
    209         } else {
    210             ele.attachEvent('on'+type, innerFun);
    211         }
    212     },
    213     index:function(ele){
    214         var parentNode = ele.parentNode;
    215         var eles = parentNode.getElementsByTagName(ele.tagName);
    216 
    217         for(var i = 0, len = eles.length; i<len; i++){
    218             if(eles[i] == ele) {
    219                 return i;
    220             }
    221         }
    222     },
    223     hasClass: function(obj, cls) {
    224         return !!obj.className && obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
    225     },
    226     addClass: function(obj, cls) {
    227         if (!this.hasClass(obj, cls)) obj.className += " " + cls;
    228     },
    229     removeClass:function (obj, cls) {
    230         if (this.hasClass(obj, cls)) {
    231             var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
    232             obj.className = obj.className.replace(reg, ' ');
    233         }
    234     },
    235     gotoIndex:function(eleContext, evt){
    236         var ele = evt.target || evt.srcElement;
    237         var index = this.index(ele);
    238         if(this.current === this.items.length-4 && index === 0) {
    239             if(this.setCurrent(0)){
    240                 this.slientGoTo();
    241             }
    242         } else if(this.current === 1 && index ===this.items.length-5) {
    243             if(this.setCurrent(this.items.length-3)){
    244                 this.slientGoTo();
    245             } 
    246         }
    247         if(this.setCurrent(index + 1)){
    248             this.doAnimate();
    249         }
    250     },
    251     prev:function(eleContext, evt){
    252         if(this.setCurrent(this.current-1)){
    253             this.doAnimate();
    254         }
    255     },
    256     next:function(eleContext, evt){
    257         if(this.setCurrent(this.current+1)){
    258             this.doAnimate();
    259         }
    260     },
    261     doAnimate:function(){
    262         this.distance = (this.wrapWidth-this.itemWidth*(2*this.current + 3))/2 - parseInt(this.oList.style.left, 10);
    263         if(this.distance < 0){
    264             this.speed = -Math.abs(this.speed);
    265         } else {
    266             this.speed = Math.abs(this.speed);
    267         }
    268         this.distance = Math.abs(this.distance);
    269         this.lock = true;
    270         this.animate();
    271     },
    272     setCurrent:function(index){
    273         if(this.lock){return false;}
    274         this.current = index;
    275         return true;
    276     },
    277     animate:function(){
    278         var that = this;
    279         this.timer = setTimeout(function() {
    280             var left = parseInt(that.oList.style.left, 10) || 0;
    281 
    282             if (that.going+Math.abs(that.speed) >= that.distance) {
    283                 if (that.speed > 0) {
    284                     that.oList.style.left = left + that.distance - that.going + 'px';
    285                 } else {
    286                     that.oList.style.left = left - that.distance + that.going + 'px';
    287                 }
    288                 clearTimeout(that.timer);
    289                 that.going = 0;
    290                 that.onceEnd();
    291             } else {
    292                 that.going += Math.abs(that.speed);
    293                 that.oList.style.left = left + that.speed + 'px';
    294                 that.animate();
    295             }
    296         }, 25);
    297 
    298     },
    299     slientGoTo:function(){
    300         this.oList.style.left = (this.wrapWidth-this.itemWidth*(2*this.current + 3))/2 + 'px';
    301     },
    302     setCircleSelect:function(){
    303         for(var i=0,len = this.pageCircles.length; i<len; i++) {
    304             var ele= this.pageCircles[i];
    305             if(this.hasClass(ele, 'select')) {
    306                 this.removeClass(ele, 'select');
    307             }
    308         }
    309         this.addClass(this.pageCircles[this.current-1], 'select');
    310     },
    311     correctCurrent:function(){
    312         if(this.current === 0) {
    313             this.current = this.items.length - 4;
    314         } else if(this.current === this.items.length - 3) {
    315             this.current = 1;
    316         } else {
    317             return false;
    318         }
    319         this.slientGoTo();
    320     },
    321     onceEnd:function(){
    322         this.correctCurrent();
    323         this.setCircleSelect();
    324         this.lock = false;
    325     }
    326 }
    327 var con = document.getElementById("container");
    328 var s = new Slider(con);
    329 </script>
    330 </body>
    331 </html>

    • 不待续...
  • 相关阅读:
    UI
    OC之block
    web前端开发学习
    OC面向对象下之文件
    UIButton
    视图
    frame和bounds
    UIView
    UIWindow
    Hello friends!
  • 原文地址:https://www.cnblogs.com/xy404/p/3629794.html
Copyright © 2020-2023  润新知