最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年08月21日 13:21:34   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇原生JS實(shí)現(xiàn)-星級(jí)評(píng)分系統(tǒng)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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

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

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

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

不知道是不是我太笨,這個(gè)實(shí)例居然寫(xiě)了整整一天!

不廢話了,先說(shuō)下這個(gè)實(shí)例涉及的知識(shí)點(diǎn):

1.用CSS的border來(lái)畫(huà)個(gè)三角形,并用before來(lái)把它加到其它元素上;

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

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

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

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

6.注冊(cè)事件與事件處理,需要兼容IE的寫(xiě)法;

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

8.簡(jiǎn)化代碼:將可能要重復(fù)寫(xiě)的代碼拿出來(lái),單獨(dú)寫(xiě)成一個(gè)函數(shù);

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

<!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,這樣頁(yè)面只重新渲染一次
          for(var i = 0;i<nums;i++){
            var a =document.createElement('a');
            a.innerHTML = i+1;
            a.href = "javascript:;"; //阻止瀏覽器的點(diǎn)擊鏈接的默認(rèn)行為
            frag.appendChild(a);
          }
          elem.appendChild(frag);
        }
        //主體函數(shù)
        function star(num,myMsg){
          var n = num||5; //當(dāng)num有值則取其值,無(wú)值則取默認(rèn)值5;
          var clickStar=curentStar=0; //clickStar保存點(diǎn)擊狀態(tài)
          var msg = myMsg||[
            "很不滿意|差得太離譜,與賣家描述的嚴(yán)重不符,非常不滿",
            "不滿意|部分有破損,與賣家描述的不符,不滿意",
            "一般|質(zhì)量一般,沒(méi)有賣家描述的那么好",
            "滿意|質(zhì)量不錯(cuò),與賣家描述的基本一致,還是挺滿意的",
            "非常滿意|質(zhì)量非常好,與賣家描述的完全一致,非常滿意"
          ];
          var starContainer = gbyId('star-div');
          appenStar(starContainer,n);
          addEvent(starContainer,'mouseover',over); //采用事件代理模式(通過(guò)<a>標(biāo)簽的父元素starContainer來(lái)代理事件)
          addEvent(starContainer,'mouseout',out);
          addEvent(starContainer,'click',click);
          function over(event){
            if(getIndex(event)){ //若getIndex(event)取不到值,說(shuō)明當(dāng)前觸發(fā)事件的目標(biāo)不是<a>標(biāo)簽
              var index = getIndex(event);
              change(index);
              showInfo(index,msg);
            }
          }
          function out(event){
            change(); //將評(píng)分設(shè)為已點(diǎn)擊狀態(tài)clickStar
            gbyId('star-info').style.display = 'none'
          }
          function click(event) {
            if (getIndex(event)) {
              var index = getIndex(event);
              clickStar = index; //保存點(diǎn)擊狀態(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>點(diǎn)擊星星打分:</span>
  <div id="star-div">
  </div>
  <span id="star-span"></span>
  <p id="star-info">
  </p>
</div>
</body>
</html>

以上這篇原生JS實(shí)現(xiàn)-星級(jí)評(píng)分系統(tǒng)的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS從數(shù)組中隨機(jī)獲取一個(gè)值的常用寫(xiě)法

    JS從數(shù)組中隨機(jī)獲取一個(gè)值的常用寫(xiě)法

    這篇文章主要介紹了JS從數(shù)組中隨機(jī)獲取一個(gè)值的常用寫(xiě)法,需要的朋友可以參考下
    2023-07-07
  • Javascript節(jié)點(diǎn)關(guān)系實(shí)例分析

    Javascript節(jié)點(diǎn)關(guān)系實(shí)例分析

    這篇文章主要介紹了Javascript節(jié)點(diǎn)關(guān)系,實(shí)例分析了javascript操作父子節(jié)點(diǎn)及兄弟節(jié)點(diǎn)的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式詳解

    ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式詳解

    為了方便使用,echarts的餅圖中給加入了默認(rèn)的hover高亮效果,下面這篇文章主要給大家介紹了關(guān)于ECharts柱狀圖關(guān)閉鼠標(biāo)hover時(shí)的高亮樣式的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • javascript級(jí)聯(lián)下拉列表實(shí)例代碼(自寫(xiě))

    javascript級(jí)聯(lián)下拉列表實(shí)例代碼(自寫(xiě))

    javascript下拉菜單想必大家在瀏覽網(wǎng)頁(yè)的時(shí)候都會(huì)看到吧,已不是那么陌生了,本文介紹使用javascript實(shí)現(xiàn)級(jí)聯(lián)下拉列表實(shí)例,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助
    2013-05-05
  • JS中利用FileReader實(shí)現(xiàn)上傳圖片前本地預(yù)覽功能

    JS中利用FileReader實(shí)現(xiàn)上傳圖片前本地預(yù)覽功能

    FileReader 對(duì)象允許Web應(yīng)用程序異步讀取存儲(chǔ)在用戶計(jì)算機(jī)上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用 File 或 Blob 對(duì)象指定要讀取的文件或數(shù)據(jù)。下面通過(guò)本文給大家介紹JS中利用FileReader實(shí)現(xiàn)上傳圖片前本地預(yù)覽功能,需要的朋友參考下
    2018-03-03
  • js微信分享實(shí)現(xiàn)代碼

    js微信分享實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了js微信分享的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • webpack 開(kāi)發(fā)和生產(chǎn)并行設(shè)置的方法

    webpack 開(kāi)發(fā)和生產(chǎn)并行設(shè)置的方法

    這篇文章主要介紹了webpack 開(kāi)發(fā)和生產(chǎn)并行設(shè)置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • ES6   Promise基礎(chǔ)用法(resolve、reject、then、catch,all)

    ES6   Promise基礎(chǔ)用法(resolve、reject、then、catch,a

    Promise是JavaScript中處理異步操作的對(duì)象,它有三種狀態(tài):Pending、Fulfilled、Rejected,使用new Promise創(chuàng)建Promise對(duì)象,通過(guò)resolve和reject改變狀態(tài),then和catch方法用于處理成功和失敗的結(jié)果,本文介紹ES6 Promise用法,感興趣的朋友一起看看吧
    2024-09-09
  • javascript克隆元素樣式的實(shí)現(xiàn)代碼

    javascript克隆元素樣式的實(shí)現(xiàn)代碼

    這是一個(gè)實(shí)驗(yàn)用的玩意,它可以克隆指定元素的最終樣式,并包裝成一個(gè)css類,它還可以證明Oprea 11.10 是個(gè)混球
    2011-10-10
  • js操作滾動(dòng)條事件實(shí)例

    js操作滾動(dòng)條事件實(shí)例

    這篇文章主要介紹了js操作滾動(dòng)條事件的方法,實(shí)例分析了滾動(dòng)條的使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2015-01-01

最新評(píng)論

安龙县| 武夷山市| 卢湾区| 大宁县| 嘉义市| 若羌县| 贺兰县| 鞍山市| 深州市| 类乌齐县| 嘉定区| 偏关县| 碌曲县| 皋兰县| 儋州市| 太湖县| 和田市| 桃江县| 正镶白旗| 民勤县| 伊川县| 太保市| 洱源县| 蕲春县| 湾仔区| 北流市| 山东| 清新县| 敦化市| 阿克苏市| 平邑县| 连江县| 锦屏县| 中西区| 顺昌县| 涪陵区| 竹北市| 永和县| 金门县| 永州市| 曲阜市|