星星評分jQuery插件

一蔑滓、前期準(zhǔn)備工作

1.下載font-awesome或引進(jìn)都可以

<link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">

-實(shí)心星星樣式
<i class="fa fa-star" aria-hidden="true" ></i>
-空心星星樣式
<i class="fa fa-star-o" aria-hidden="true" ></i>

2.引進(jìn)jquery

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js">
 </script>

3.創(chuàng)建div
用于測試效果

<div id="container"></div>

二枣抱、實(shí)現(xiàn)js效果

最終效果圖

1.需要實(shí)現(xiàn)的效果

  • 默認(rèn)生成實(shí)心star和空心star
  • 鼠標(biāo)移入時,從開始位置到當(dāng)前位置都為fa-star(實(shí)心)入偷,其他為fa-star-o(空心)
  • 鼠標(biāo)移出恢復(fù)復(fù)默認(rèn)樣式
  • 鼠標(biāo)點(diǎn)擊時哗魂,從開始位置到當(dāng)前位置都為fa-star(實(shí)心)蒙幻,其他為fa-star-o(空心)

2.思考實(shí)現(xiàn)

2.1 默認(rèn)生成實(shí)心star和空心star

var count = 10  //生成star總數(shù)
var score = 5   //生成實(shí)心數(shù)
for (let i = 0; i < count; i++) {
      //定義生成star的i標(biāo)簽,為實(shí)心和空心的公共部分
      var star = $(`<i class="fa star" aria-hidden="true" style="color:gold;font-size:12px;"></i>`)
      //控制實(shí)心個數(shù)
      if (i < score) {
          //添加實(shí)心樣式
         star.addClass("fa-star")
       } else {
          //添加空心樣式
         star.addClass("fa-star-o")
       }
      //在div中添加
      $("#container").append(star)
 }
默認(rèn)效果圖

2.2鼠標(biāo)移入mouseenter

  • 使用index()找到當(dāng)前star的位置衣迷,遍歷所有的star,開始到當(dāng)前為fa-star畏鼓,其他為fa-star-o
 $(".star").mouseenter(function () {
      //獲取當(dāng)前元素的位置
      var val = $(this).index() + 1
     $(".star").each(function (i) {
             if (i < val) {
        //當(dāng)前元素增加實(shí)心樣式去除空心樣式
                $(this).addClass("fa-star").removeClass("fa-star-o")
              } else {
       //當(dāng)前元素增加空心樣式去除實(shí)心樣式
        $(this).addClass("fa-star-o").removeClass("fa-star")
          }
      })
 })
鼠標(biāo)移入

2.3鼠標(biāo)移出mouseleave

  • 恢復(fù)默認(rèn)樣式(開始生成時)(鼠標(biāo)未點(diǎn)擊)
  • 移除后,開始到點(diǎn)擊位置star都為實(shí)心(鼠標(biāo)點(diǎn)擊以后)蘑险,通過變量score控制數(shù)量
  $(".star").mouseleave(function () {
       $(".star").each(function (i) {
            if (i < score) {
             //當(dāng)前元素增加實(shí)心樣式去除空心樣式
            $(this).addClass("fa-star").removeClass("fa-star-o")
             } else {
              //當(dāng)前元素增加空心樣式去除實(shí)心樣式
             $(this).addClass("fa-star-o").removeClass("fa-star")
           }
       })
   })

2.4鼠標(biāo)點(diǎn)擊click

  • 點(diǎn)擊之后滴肿,開始到點(diǎn)擊位置為實(shí)心,改變score的值來實(shí)現(xiàn)
 $(".star").click(function () {
   score = $(this).index() + 1
 })

3.改善代碼

  • 實(shí)現(xiàn)效果后佃迄,檢查所寫代碼是否存在重復(fù)泼差,有可將重復(fù)的部分改寫成函數(shù),進(jìn)行封裝調(diào)用呵俏,減少代碼量

鼠標(biāo)移入和移出處代碼重復(fù)堆缘,可進(jìn)行封裝,改善如下

//重復(fù)部分封裝成setStar函數(shù)
 function setStar(val) {
    $(".star").each(function (i) {
     if (i < val) {
          $(this).addClass("fa-star").removeClass("fa-star-o")
           } else {
             $(this).addClass("fa-star-o").removeClass("fa-star")
          }
   })
 }
//鼠標(biāo)移入
 $(".star").mouseenter(function () {
      setStar($(this).index() + 1)
  })
//鼠標(biāo)移出
  $(".star").mouseleave(function () {
         setStar(score)
    })

三、升級為插件

1.思考插件需要做到什么

  • 引入相關(guān)文件即可使用
  • 有復(fù)用性普碎,在這個項(xiàng)目中可以使用吼肥,另一個項(xiàng)目中也可以使用
  • 有易用性,用戶調(diào)用簡單,不繁瑣

2.根據(jù)思考完善內(nèi)部代碼缀皱,用戶可根據(jù)需求更改參數(shù)

第一步

  • 創(chuàng)建raty.js斗这,定一個閉包區(qū)域,防止插件污染
  • 使用$.fn.extend()擴(kuò)展jquery 方法啤斗,制作插件
;
(()=>{
      $.fn.extend({
            raty(options){  }
      })
})()
;

注意:$.extend方法和$.fn.extend方法都可以用來擴(kuò)展jQuery功能表箭,$.extend方法是在jQuery全局對象上擴(kuò)展方法;
$.fn.extend方法是在$選擇符選擇的jQuery對象上擴(kuò)展方法
擴(kuò)展jQuery的公共方法一般用$.extend方法
定義插件一般用$.fn.extend方法

第二步

  • 此插件用戶可更改idcontainer钮莲,生成星星總數(shù)count免钻、默認(rèn)實(shí)心數(shù)score、顏色color崔拥、大小size
    參數(shù)較多极舔,所以用對象傳參(不更改的情況有默認(rèn)值)
  • 對原代碼中的變量進(jìn)行修改

代碼如下:

 // 默認(rèn)值
var settings = {
      count: 10,//star總數(shù)
      score: 5,//star實(shí)心數(shù)
       color: "gold",//star顏色
       size: "12px"http://star大小
  }
  $.extend(settings, options)//合并兩個對象,將用戶傳過來的值更新到settings中
  settings.container = "#" + this.attr("id")//獲取調(diào)用id
 for (let i = 0; i < settings.count; i++) {
      var star = $(`<i class="fa star" aria-hidden="true" style="color:${settings.color};font-size:${settings.size};"></i>`)
       if (i < settings.score) {
             star.addClass("fa-star")
       } else {
           star.addClass("fa-star-o")
        }
       $(settings.container).append(star)
 }

第三步

  • 檢查代碼,防止效果互相影響
    例如如下情況:
代碼不嚴(yán)謹(jǐn)链瓦,效果相互影響展示
  • 效果只能在當(dāng)前調(diào)用id內(nèi)發(fā)生拆魏,不能影響其他id,;
    遍歷star也只能在當(dāng)前調(diào)用star內(nèi)澡绩;

所以在鼠標(biāo)事件中加入idsettings.container,函數(shù)setStar中也加入settings.container

更改代碼如下:

//在當(dāng)前調(diào)用的id里面
 $(settings.container + " .star").mouseenter(function () {
       setStar($(this).index() + 1)
 })
 $(settings.container + " .star").mouseleave(function () {
                        setStar(settings.score)
 })
  $(settings.container + " .star").click(function () {
  settings.score = $(this).index() + 1
  })
function setStar(val) {
 $(settings.container + " .star").each(function (i) {
          if (i < val) {
         $(this).addClass("fa-star").removeClass("fa-star-o")
           } else {
               $(this).addClass("fa-star-o").removeClass("fa-star")
            }
          })
  }

四稽揭、使用方法
1.下載或引用font-awesome
因?yàn)椴寮褂玫男切鞘莊ont-awesome的圖標(biāo),所以需要引入或者下載

<link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">

2.引進(jìn)jquery

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>

3.創(chuàng)建div
創(chuàng)建兩個div進(jìn)行測試肥卡,一個展示默認(rèn)效果溪掀,一個展示傳參后效果

 <!-- 默認(rèn)效果 -->
 <p>默認(rèn)效果</p>
<div id="container"> </div>
 <!-- 更改 -->
 <p>傳參后</p>
 <div id="container2"></div>

4.在script中引用

 <script>
   $("#container").raty()
     $("#container2").raty({
             count: 6,
             score: 1,
             color: "Crimson"
            })
  </script>
引用效果圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市步鉴,隨后出現(xiàn)的幾起案子揪胃,更是在濱河造成了極大的恐慌,老刑警劉巖氛琢,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喊递,死亡現(xiàn)場離奇詭異,居然都是意外死亡阳似,警方通過查閱死者的電腦和手機(jī)骚勘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撮奏,“玉大人俏讹,你說我怎么就攤上這事⌒蟮酰” “怎么了泽疆?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玲献。 經(jīng)常有香客問我殉疼,道長梯浪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任瓢娜,我火速辦了婚禮挂洛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恋腕。我一直安慰自己抹锄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布荠藤。 她就那樣靜靜地躺著,像睡著了一般获高。 火紅的嫁衣襯著肌膚如雪哈肖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天念秧,我揣著相機(jī)與錄音淤井,去河邊找鬼。 笑死摊趾,一個胖子當(dāng)著我的面吹牛币狠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砾层,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼漩绵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肛炮?” 一聲冷哼從身側(cè)響起止吐,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侨糟,沒想到半個月后碍扔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秕重,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年不同,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溶耘。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡二拐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汰具,到底是詐尸還是另有隱情卓鹿,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布留荔,位于F島的核電站吟孙,受9級特大地震影響澜倦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杰妓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一藻治、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巷挥,春花似錦桩卵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至高职,卻和暖如春钩乍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怔锌。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工寥粹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埃元。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓涝涤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岛杀。 傳聞我的和親對象是個殘疾皇子阔拳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容