国产综合精品在线,精品一区国产精品,中文在线欧美日韩视频,中文字幕制服亚洲另类

<dfn id="ykamo"><pre id="ykamo"></pre></dfn>
  • <rt id="ykamo"><code id="ykamo"></code></rt>
  • <strike id="ykamo"></strike>
    很酷的星級評分系統(tǒng)原生JS實現(xiàn)
    來源:易賢網(wǎng) 閱讀:1467 次 日期:2016-08-30 14:09:35
    溫馨提示:易賢網(wǎng)小編為您整理了“很酷的星級評分系統(tǒng)原生JS實現(xiàn)”,方便廣大網(wǎng)友查閱!

    這篇文章主要weidajiaxiangxi介紹了很酷的星級評分系統(tǒng)原生JS實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下

    今天寫了個很酷的實例:星級評分系統(tǒng)(可自定義星星個數(shù)、顯示信息)

    sufuStar.star();使用默認(rèn)值5個星星,默認(rèn)信息

    var msg = [........]; sufuStar.star(10,msg);自定義星星個數(shù)為10、顯示信息msg格式參考默認(rèn)值,條數(shù)必須和星星個數(shù)一致; 

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

    先說下這個實例涉及的知識點:

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

    2.學(xué)習(xí)如何用CSS來定位元素;

    3.學(xué)習(xí)事件的代理;

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

    5.String對象的match方法的應(yīng)用,正則表達(dá)式的應(yīng)用;

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

    7.學(xué)習(xí)如何利用‘||'給變量設(shè)置默認(rèn)值;

    8.簡化代碼:將可能要重復(fù)寫的代碼拿出來,單獨寫成一個函數(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:;"; //阻止瀏覽器的點擊鏈接的默認(rèn)行為

          frag.appendChild(a);

         }

         elem.appendChild(frag);

        }

        //主體函數(shù)

        function star(num,myMsg){

         var n = num||5; //當(dāng)num有值則取其值,無值則取默認(rèn)值5;

         var clickStar=curentStar=0; //clickStar保存點擊狀態(tài)

         var msg = myMsg||[

          "很不滿意|差得太離譜,與賣家描述的嚴(yán)重不符,非常不滿",

          "不滿意|部分有破損,與賣家描述的不符,不滿意",

          "一般|質(zhì)量一般,沒有賣家描述的那么好",

          "滿意|質(zhì)量不錯,與賣家描述的基本一致,還是挺滿意的",

          "非常滿意|質(zhì)量非常好,與賣家描述的完全一致,非常滿意"

         ];

         var starContainer = gbyId('star-div');

         appenStar(starContainer,n);

         addEvent(starContainer,'mouseover',over); //采用事件代理模式(通過<a>標(biāo)簽的父元素starContainer來代理事件)

         addEvent(starContainer,'mouseout',out);

         addEvent(starContainer,'click',click);

         function over(event){

          if(getIndex(event)){ //若getIndex(event)取不到值,說明當(dāng)前觸發(fā)事件的目標(biāo)不是<a>標(biāo)簽

           var index = getIndex(event);

           change(index);

           showInfo(index,msg);

          }

         }

         function out(event){

          change(); //將評分設(shè)為已點擊狀態(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才能調(diào)用匿名函數(shù)的返回值star

       //調(diào)用執(zhí)行: sufuStar.star(num,myMsg),參數(shù)可為空,參數(shù)num,myMsg將設(shè)為默認(rèn)值

       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>

    以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機網(wǎng)站地址:很酷的星級評分系統(tǒng)原生JS實現(xiàn)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)