国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js評分組件使用詳解

2019-11-19 16:25:07
字體:
來源:轉載
供稿:網友

我們知道,許多外賣app都有評分的星星,這里我總結一下對評分組件的開發,學習視頻:餓了么實戰(慕課網)

1.html部分

<div class="star" :class="starType">    <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span></div>

解釋

1.在大的div里綁定starType是因為在整個App中,有多個評分組件,而它們的大小不一樣,所以根據大小動態的綁定class.

同樣的原理,在上一節header組件開發中也有介紹,但直到寫到這里我開始漸漸明白vue.js中:class的意義。以前我想既然可以直接添加class,為什么要用綁定class來多此一舉。現在我明白的,基礎的樣式設定,直接添加class就可以了,但是有時候涉及到根據不同的狀態有不同的樣式時,就要用綁定class了。

2.v-for 這里我們沒有寫5個span,而是遍歷itemClasses,這是vue.js中的一種常用方法。既減少了代碼,而且動態獲取數據。

2.js部分

1. 得到評分數據

像上一節一樣,我們通過props來接收數據。我們要接收的是兩個number類型的數據,一個是星星的尺寸,一個是分數。

props: {      size:{        type:Number      },      score:{        type:Number      }    }

2.屬性的計算

1).接收size動態綁定不同的class

starType() {        return 'star-'+this.size;      }  .star-48 {    width: 20px;    height: 20px;    margin-right: 22px;    background-size: 20px 20px;      }  .star-36 {    width: 15px;    height: 15px;    margin-right: 6px;    background-size: 15px 15px;  }  .star-24 {    width: 10px;    height: 10px;    margin-right: 3px;    background-size: 10px 10px;  }

2). 通過計算確定添加全星半星和無星

const LENGTH = 5;const CLS_ON = 'on';const CLS_HALF = 'half';const CLS_OFF = 'off';itemClasses() {        let result = [];        let score = Math.floor(this.score*2)/2;        let hasDecimal = score%1 !== 0;        let integer = Math.floor(score);        for (var i = 0; i < integer; i++) {          result.push(CLS_ON);        }        if(hasDecimal) {          result.push(CLS_HALF);        }        while (result.length<LENGTH) {          result.push(CLS_OFF);        }        return result;      }

這段代碼的思路是:創建一個數組儲存星星,判斷分數是否在.5以上,將分數取整,有多少分push幾個on星星進去,有.5以上,push一個half,然后push進off直到長度達到5。

3).css部分
以star-48的尺寸為例

.star-48 .on {    background-image: url('star48_on@2x.png')  }  .star-48 .half {    background-image: url('star48_half@2x.png')  }  .star-48 .off {    background-image: url('star48_off@2x.png')  }

4.完整代碼

<template> <div class="star" :class="starType">  <span v-for="itemClass in itemClasses" :class="itemClass" class="star-item" track-by="$index"></span> </div></template><script type="text/javascript"> const LENGTH = 5; const CLS_ON = 'on'; const CLS_HALF = 'half'; const CLS_OFF = 'off'; export default {  props: {   size:{    type:Number   },   score:{    type:Number   }  },  computed:{   starType() {    return 'star-'+this.size;   },   itemClasses() {    let result = [];    let score = Math.floor(this.score*2)/2;    let hasDecimal = score%1 !== 0;    let integer = Math.floor(score);    for (var i = 0; i < integer; i++) {     result.push(CLS_ON);    }    if(hasDecimal) {     result.push(CLS_HALF);    }    while (result.length<LENGTH) {     result.push(CLS_OFF);    }    return result;   }  } };</script><style type="text/css"> .star {  font-size: 0; } /* .star-48 {  width: 20px;  height: 20px;  margin-right: 22px;  background-size: 20px 20px;   } */ .star-48 : last-chlid {  margin-right: 0; } .star-48 .on {  background-image: url('star48_on@2x.png') } .star-48 .half {  background-image: url('star48_half@2x.png') } .star-48 .off {  background-image: url('star48_off@2x.png') } .star-36 {  width: 15px;  height: 15px;  margin-right: 6px;  background-size: 15px 15px; } .star-36 .no {  background-image: url('star36_on@2x.png') } .star-36 .half {  background-image: url('star36_half@2x.png') } .star-36 .off {  background-image: url('star36_off@2x.png') } .star-24 {  width: 10px;  height: 10px;  margin-right: 3px;  background-size: 10px 10px; } .star-24 .no {  background-image: url('star24_on@2x.png') } .star-24 .half {  background-image: url('star24_half@2x.png') } .star-24 .off {  background-image: url('star24_off@2x.png') } .star-item {  display: inline-block;  background-repeat: no-repeat;  width: 20px;  height: 20px;  margin-right: 22px;  background-size: 20px 20px; }</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石林| 西宁市| 平定县| 囊谦县| 依安县| 利川市| 郧西县| 西吉县| 贵港市| 嘉峪关市| 潼关县| 句容市| 巩义市| 当阳市| 翼城县| 金塔县| 平原县| 商南县| 丹凤县| 得荣县| 土默特左旗| 德格县| 石嘴山市| 綦江县| 长海县| 日土县| 平利县| 海原县| 柯坪县| 衡阳县| 伊金霍洛旗| 明光市| 玉门市| 岗巴县| 石台县| 怀仁县| 临城县| 镇巴县| 康乐县| 舟曲县| 阜城县|