资讯专栏INFORMATION COLUMN

微信小程序之店铺评分组件及vue中用svg实现的评分显示组件

BetaRabbit / 3327人阅读

摘要:在微信小程序中,有遇到要展示店铺评分,或者是订单完成后对商品进行评价,用到了星星展示,查了下,在微信中无法使用实现图片,微信中只能将图片转成来显示,所以是在中使用的来实现评分效果图微信中的可以点击及显示,但是,显示的话,在分,点多分的时候,

在微信小程序中,有遇到要展示店铺评分,或者是订单完成后对商品进行评价,用到了星星展示,查了下,在微信中无法使用svg实现图片,微信中只能将svg图片转成base64来显示,所以是在vue中使用的svg来实现评分
1.效果图
微信中的可以点击及显示,但是,显示的话,在4.2分,4点多分的时候,显示的是半颗星

vue中用的是svg实现,所以用的是占比的形式,可以有一点点的星

星星图片

2.微信实现店铺评分显示及商品评价星星展示

子组件index.wxml,可以动态的控制星星的大小



  
    
      
    
  
  
    暂无评分
    差评
    中评
    好评
  

子组件index.wxss

.starsBox{
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.stars{
  width: 150rpx;
  height: 50rpx;
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.stars image{
  width: 30rpx;
  height: 30rpx;
}
.text{
  color: #ccc;
  margin-left: 20rpx;
}

子组件index.js

Component({
  properties: {
    /* 显示有色星星的个数 */
    value: {
      type: Number,
      value: 0,
      /* 监听value值的变化 */
      observer: function (newVal, oldVal, changedPath) {
        this.init()
      }
    },
    /* 设置星星大小 */
    size: {
      type: Number,
      value: 30
    },
    /* 是否可点击,type为null表示值可以是任意类型 */
    isClick: {
      type: null,
      value: false
    }
  },
  attached() {
    /* 组件生命周期函数,在组件实例进入页面节点树时执行 */
    this.init();
  },
  data: {
    stars: [0, 0, 0, 0, 0]
  },
  methods: {
    init() {
      let star = this.properties.value;
      let stars = [0, 0, 0, 0, 0];
      /* 图片名称,通过设置图片名称来动态的改变图片显示 */
      for (let i = 0; i < Math.floor(star); i++) {
        stars[i] = "star";
      }
      if (star > Math.floor(star)) {
        stars[Math.floor(star)] = "halfStar";
      }
      for (let i = 0; i < stars.length; i++) {
        if (stars[i] == 0) {
          stars[i] = "grayStar";
        }
      }
      this.setData({
        stars
      })
    },
    /* 可点击时,用于计算分数 */
    computeScore(e) {
      let index = e.currentTarget.dataset.index;
      let isClick = this.data.isClick;
      if (isClick) {
        let score = index + 1;
        this.triggerEvent("compute", {
          score
        });
      }
    }
  }
})
3.父组件中引用

父组件index.wxml


    
        
    
    
            
    

父组件index.json

{
    "usingComponents": {
        "score": "/component/score/index"
    }
}

父组件index.js

data: {
    shopGrade: 0,
    shopGrade1: 4.6,
},
/* 评分处理事件 */
computeGrade(e) {
    let score = e.detail.score;
    this.setData({
        shopGrade: score
    })
},
4.vue中使用svg实现评分

首先在vue使用的index.html的模板文件中添加一个rem转换算法,因为我后面用的单位是rem

/* 在头部添加 */

然后添加svg.vue文件,这个svg文件可以自己找图片生成,并设置对应的id



rating.vue文件引用svg.vue




都有用到组件,可以查看下方的推荐文章中的购物车中的父子组件传值

正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)

往期好文推荐:

判断iOS和Android及PC端

实现单行文字及多行文字的省略号

微信小程序之购物车和父子组件传值及calc的注意事项

纯css实现瀑布流(multi-column多列及flex布局)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108582.html

相关文章

  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    pumpkin9 评论0 收藏0
  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    Carson 评论0 收藏0
  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    muzhuyu 评论0 收藏0
  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    li21 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<