Vue评分插件

五星评分插件

做电商网站要用到评分功能,于是自己写了一个小插件vue_star.js

测试html:

<!DOCTYPE html>

<html>

<head>

<script src="vue.min.js"></script>

<script src="vue_star.js"></script>

<style>

@font-face {

font-family: 'icon-font';

src: url('iconfont.eot');

src: url('iconfont.eot?#iefix') format('embedded-opentype'),

url('iconfont.woff2') format('woff2'),

url('iconfont.woff') format('woff'),

url('iconfont.ttf') format('truetype'),

url('iconfont.svg##iconfont') format('svg');

}

</style>

<link href="vue_star.css" rel="stylesheet">

</head>

<body>

<div id="container">

固定:

<star :star="3.8" :modify="'f'" :f_size="20"></star>

手动:

<star :star="0" :modify="'t'" :f_size="30"></star>

</div>

</body>

<script>

window.onload = function(){

new Vue({el: '#container'})

}

</script>

</html>

效果图

vue_star.js:

Vue.component('star', {

props: ['star', 'modify', 'f_size'],

data: function(){

return {

percent: this.$props['star']/5,

can_modify: this.$props['modify']!=='f',

debounce: false,

}

},

template: "" +

"<div class='star' :style='{width: f_size*5+\"px\"}'>" +

" <span :style='{width: percent*100+\"%\", fontSize: f_size+\"px\"}' @mousemove='check_change'></span>" +

" <b>{{ mark }}</b>" +

"</div>"

,

computed: {

mark: function () {

return (this.percent*5).toString().replace(/(\.\d)\d*/, '$1')

}

},

methods: {

check_change: function(e){

if(this.can_modify){

this.mouse_move(e);

}

},

mouse_move: function (e) {

this.percent = e.offsetX/this.$el.offsetWidth;

}

}

});

vue_star.scss:

.star{

display: flex;

align-items: center;

position: relative;

>span{

position: relative;

display: flex;

&:before,&:after{

position: absolute;

top: 0;

left: 0;

font-family: 'iconfont';

content: '\e72d\e72d\e72d\e72d\e72d';

}

&:before{

position: relative;

color: #8b8b8b;

overflow: visible;

}

&:after{

width: 100%;

color: #ffb652;

overflow: hidden;

transition: all .1s linear;

}

}

>b{

position: absolute;

top: 0;

left: 100%;

font-size: 15px;

}

}

题外话

  • Sass的官网说自己是世界上最成熟、稳定和强大的CSS扩展语言,名副其实,用Sass至少能省1/3的css编写时间,对笔者来说它最大的好处是可以很简单地精确定位到元素。不用绞尽脑汁想类名,同一个html用很多.head这种简单类名而不用担心css混淆。
  • Vue的出发点很好:只针对前端,数据驱动。改变了我对前端开发的理解。以前无论用jsp还是django和flask,都是数据和html耦合在一起,因为我都是一个人写前后端,也没觉得有什么不方便。学了vue之后,虽然后端还是servlet+jsp,但是jsp基本不处理数据,或处理一些不需要访问Dao层的简单数据(比如静态共用数据和session),其它数据交给ajax,数据渲染交给vue的数据双向绑定和v-if,实在好用。

以上是 Vue评分插件 的全部内容, 来源链接: utcz.com/a/15482.html

回到顶部