我们知道,许多外卖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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 评分组件
# vue实现简单的星级评分组件源码
# 微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
# vue2.0实现前端星星评分功能组件实例代码
# iOS实现支持小数的星星评分组件实例代码
# Android开发之拖动条和评分组件用法分析
# React星星评分组件的实现
# 绑定
# 要用
# 的是
# 这是
# 我想
# 几个
# 都有
# 也有
# 是因为
# 多个
# 遍历
# 这段
# 有多少
# 可以直接
# 为例
# 写到
# 涉及到
# 在上
# 饿了
# 创建一个
相关文章:
C#如何使用XPathNavigator高效查询XML
学校为何禁止电信移动建设网站?
手机网站制作与建设方案,手机网站如何建设?
孙琪峥织梦建站教程如何优化数据库安全?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在阿里云通过域名搭建网站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何批量查询域名的建站时间记录?
如何在七牛云存储上搭建网站并设置自定义域名?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
定制建站哪家更专业可靠?推荐榜单揭晓
济南网站建设制作公司,室内设计网站一般都有哪些功能?
微信推文制作网站有哪些,怎么做微信推文,急?
高端建站三要素:定制模板、企业官网与响应式设计优化
大同网页,大同瑞慈医院官网?
如何快速建站并高效导出源代码?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何通过主机屋免费建站教程十分钟搭建网站?
动图在线制作网站有哪些,滑动动图图集怎么做?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
如何通过山东自助建站平台快速注册域名?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
小型网站建站如何选择虚拟主机?
韩国服务器如何优化跨境访问实现高效连接?
制作销售网站教学视频,销售网站有哪些?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
nginx修改上传文件大小限制的方法
公司网站制作需要多少钱,找人做公司网站需要多少钱?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
教学论文网站制作软件有哪些,写论文用什么软件
?
金*站制作公司有哪些,金华教育集团官网?
如何快速辨别茅台真假?关键步骤解析
如何在宝塔面板中创建新站点?
建站主机与虚拟主机有何区别?如何选择最优方案?
制作旅游网站html,怎样注册旅游网站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在阿里云域名上完成建站全流程?
建站之星如何开启自定义404页面避免用户流失?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何在Windows 2008云服务器安全搭建网站?
如何快速生成橙子建站落地页链接?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
开心动漫网站制作软件下载,十分开心动画为何停播?
西安大型网站制作公司,西安招聘网站最好的是哪个?
,交易猫的商品怎么发布到网站上去?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
企业微网站怎么做,公司网站和公众号有什么区别?
*请认真填写需求信息,我们会在24小时内与您取得联系。