麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

原生JS實現(xiàn)-星級評分系統(tǒng)的簡單實例

2019-11-20 09:11:12
字體:
來源:轉載
供稿:網(wǎng)友

今天我又寫了個很酷的實例:星級評分系統(tǒng)(可自定義星星個數(shù)、顯示信息)
sufuStar.star();
使用默認值5個星星,默認信息

var msg = [........];
sufuStar.star(10,msg);

自定義星星個數(shù)為10、顯示信息msg格式參考默認值,條數(shù)必須和星星個數(shù)一致;

自己實現(xiàn)一些實例,有個好處,能增加應用各知識點的熟練度,還能檢驗出自己的薄弱項!一經(jīng)發(fā)現(xiàn),立即翻API文檔惡補!

不知道是不是我太笨,這個實例居然寫了整整一天!

不廢話了,先說下這個實例涉及的知識點:

1.用CSS的border來畫個三角形,并用before來把它加到其它元素上;

2.學習如何用CSS來定位元素;

3.學習事件的代理;

4.如何優(yōu)化性能;

5.String對象的match方法的應用,正則表達式的應用;

6.注冊事件與事件處理,需要兼容IE的寫法;

7.學習如何利用‘||'給變量設置默認值;

8.簡化代碼:將可能要重復寫的代碼拿出來,單獨寫成一個函數(shù);

下面是帶注釋的完整代碼,碰到不懂得就查文檔吧,以我目前的水平只能寫成這樣了,若有好的建議,歡迎前輩指出!

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title></title>  <style>    *{      margin: 0;      padding: 0;    }    #star{      position: absolute;      left: 0;      right: 0;      top: 30px;      bottom: 0;      margin: auto;      width: 80%;      font-size: 12px;    }    #star-div{      margin:5px;      font-size: 0;    }    #star-div a{      display: inline-block;      width: 21px;      height: 21px;      background: url(http://files.cnblogs.com/files/susufufu/star0.gif) no-repeat;    }    #star-div .on{      background: url(http://files.cnblogs.com/files/susufufu/star1.gif) no-repeat;    }    #star-info{      position: absolute;      top: 55px;      left: -30px;      display: none;      width: 155px;      height: 50px;      padding: 2px;      line-height: 17px;      border-radius: 8px;      background-color: gold;      z-index: 5;    }    #star-info:before{      content: '';      border-bottom: 10px solid gold;      border-left: 10px solid rgba(0,0,0,0);      border-right: 10px solid rgba(0,0,0,0);      position: absolute;      left: 35px;      top: -10px;    }    #star-span{line-height: 14px}    #star-info strong,#star-span strong{      color: red;    }  </style>  <script>    window.onload = function(){      var sufuStar = function (){        //工具函數(shù)        function gbyId(id){return document.getElementById(id);}        function addEvent(elem,type,func){ //兼容IE          if(elem.addEventListener){            elem.addEventListener(type,func,false)          }else if(elem.attachEvent){            elem.attachEvent('on'+type,func)          }        }        function getIndex(event) { //兼容IE          var e = event || window.event;          var t = e.target || e.srcElement;          if (t.tagName.toLowerCase() === 'a') {            return parseInt(t.innerHTML);          }        }        function showInfo(index,msg){          var info = gbyId('star-info');          info.style.display = 'block';          info.style.left = index*21-51+'px';          info.innerHTML = "<strong> "+index+'分 '+msg[index-1].match(/(.+)/|/)[1]+'<br />'+'</strong>'+msg[index-1].match(//|(.+)/)[1];        }        function appenStar(elem,nums){          var frag = document.createDocumentFragment(); //為了提高性能,因使用DocumentFragment一次性append,這樣頁面只重新渲染一次          for(var i = 0;i<nums;i++){            var a =document.createElement('a');            a.innerHTML = i+1;            a.href = "javascript:;"; //阻止瀏覽器的點擊鏈接的默認行為            frag.appendChild(a);          }          elem.appendChild(frag);        }        //主體函數(shù)        function star(num,myMsg){          var n = num||5; //當num有值則取其值,無值則取默認值5;          var clickStar=curentStar=0; //clickStar保存點擊狀態(tài)          var msg = myMsg||[            "很不滿意|差得太離譜,與賣家描述的嚴重不符,非常不滿",            "不滿意|部分有破損,與賣家描述的不符,不滿意",            "一般|質量一般,沒有賣家描述的那么好",            "滿意|質量不錯,與賣家描述的基本一致,還是挺滿意的",            "非常滿意|質量非常好,與賣家描述的完全一致,非常滿意"          ];          var starContainer = gbyId('star-div');          appenStar(starContainer,n);          addEvent(starContainer,'mouseover',over); //采用事件代理模式(通過<a>標簽的父元素starContainer來代理事件)          addEvent(starContainer,'mouseout',out);          addEvent(starContainer,'click',click);          function over(event){            if(getIndex(event)){ //若getIndex(event)取不到值,說明當前觸發(fā)事件的目標不是<a>標簽              var index = getIndex(event);              change(index);              showInfo(index,msg);            }          }          function out(event){            change(); //將評分設為已點擊狀態(tài)clickStar            gbyId('star-info').style.display = 'none'          }          function click(event) {            if (getIndex(event)) {              var index = getIndex(event);              clickStar = index; //保存點擊狀態(tài)              gbyId('star-info').style.display = 'none';              gbyId('star-span').innerHTML = "<strong>" + index + '分 ' + msg[index - 1].match(/(.+)/|/)[1] + '</strong>'+'<br />'+ msg[index - 1].match(//|(.+)/)[1];            }          }          function change(index){            curentStar = index||clickStar;            for(var i=0;i<n;i++){              starContainer.children[i].className = i<curentStar ? 'on' : ''            }          }        }        return {          star:star        }      }(); //這里的()表示函數(shù)立即執(zhí)行,這樣變量sufuStar才能調用匿名函數(shù)的返回值star      //調用執(zhí)行: sufuStar.star(num,myMsg),參數(shù)可為空,參數(shù)num,myMsg將設為默認值      sufuStar.star();    }  </script></head><body><div id="star">  <span>點擊星星打分:</span>  <div id="star-div">  </div>  <span id="star-span"></span>  <p id="star-info">  </p></div></body></html>

以上這篇原生JS實現(xiàn)-星級評分系統(tǒng)的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产99久久久久久宅男i | 免费看成人av| 午夜神马电影网 | 深夜免费视频 | 全黄毛片| 国产1区2区在线 | 国产精品一区在线观看 | 欧美日本色 | 男女无遮挡羞羞视频 | 天堂成人国产精品一区 | 黄色网电影 | 亚洲免费高清 | 午夜国产在线 | 性欧美日本 | 久久精品2019中文字幕 | 久久精品免费国产 | 把娇妻调教成暴露狂 | 最新av在线免费观看 | 亚洲va久久久噜噜噜久牛牛影视 | 成人性生活视频在线观看 | 黄色av.com| 欧美巨根 | 久草在线视频精品 | 一二区电影 | av在线免费观看播放 | 羞羞的小视频 | 国产精品久久久久久久久久久久午夜 | 免费日本一区二区 | 国产精品99久久久久久久vr | 日韩一级视频 | 黑人一区二区三区四区五区 | 国产精品午夜一区 | 亚洲第一男人天堂 | 人人看人人舔 | 免费观看一区二区三区 | www.9191.com| 久久久在线免费观看 | 91色一区二区三区 | 性欧美xxxx免费岛国不卡电影 | 国产精品成人av片免费看最爱 | 国产精品久久久久久久久久东京 |