JavaScript 实现五角星评分功能

很久没写博客了,今年元旦到现在的业余时间一直在学习英语,看英文原著,挺耗时间的,没时间写博客(借口)。

同事正在学习前端开发,写了这个 Demo 给他学习。嘻嘻

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title>五角星评分</title>
	<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
		}

		i.fa {
			color: #e67e22;
			font-size: 40px;
		}
	</style>
</head>

<body>
	<div>
		<i class="fa fa-star-o" aria-hidden="true"></i>
		<i class="fa fa-star-o" aria-hidden="true"></i>
		<i class="fa fa-star-o" aria-hidden="true"></i>
		<i class="fa fa-star-o" aria-hidden="true"></i>
		<i class="fa fa-star-o" aria-hidden="true"></i>
	</div>

</body>
<script>
	var div = document.getElementsByTagName("div")[0];
	var stars = document.getElementsByTagName("i");
	var storage = void(0);  // 点击的时候记录当前点击的位置
	var sign = false; // 标记当前是否是半颗星,false 不是半星,true 为半星

	for (var i = 0; i < stars.length; i++) {
		stars[i].setAttribute("index", i);

		stars[i].onmousemove = function (e) {
			var currIndex = this.getAttribute("index");
			var currSign = starHalf(e.offsetX, this.offsetWidth)
			starLight(stars, currIndex, currSign)
		}

		stars[i].onmouseleave = function (e) {
			starLight(stars, storage, sign)
		}

		stars[i].onclick = function (e) {
			storage = this.getAttribute("index");
			sign = starHalf(e.offsetX, this.offsetWidth)
		}
	}

	/**
	 * 是否是半星
	 * @param {currWidth} 一个星星最左边到鼠标位置的长度
	 * @param {halfWidth} 一个星星一半的长度
	 * @return {boolean} true 是半星,false 不是半星
	 */
	function starHalf(currWidth, halfWidth) {
		return currWidth <= halfWidth / 2 ? true : false
	}

	/**
	 * 点亮星星
	 * @param {object} elem 星星数组元素
	 * @param {number} index 最多需要点亮多个星星
	 * @param {boolean} sign 是否是半星,true 是半星,false 不是半星
	 */
	function starLight(elem, index, sign) {
		for (var i = 0; i < elem.length; i++) {
			elem[i].className = i <= index ? "fa fa-star" : "fa fa-star-o";
		}
		if (sign) {
			elem[index].className = "fa fa-star-half-o";
		}
	}
</script>

</html>
  

  

原文地址:https://www.cnblogs.com/Pinin/p/10647845.html

时间: 2024-12-16 17:46:41

JavaScript 实现五角星评分功能的相关文章

css简单实现五角星评分、点赞收藏、展示评分(半颗星、1/3颗星)

1.前言 之前做的好几个项目中,都会遇到打分,评分,点赞这样的需求,写了很多次,每次需要再写的时候,就会翻出之前写过的代码,然后copy过来.总觉得这样的话没有进步,没有把知识放进脑袋里,所以,自己花了2个小时,把这三种类型的需求自己写了demo并做了演示,这样的话,感觉一字一字敲出来的代码,确实是到了脑袋里了.之前一直崇尚写简单的博客,也将五角星评分.点赞收藏.展示评分写成了三个简单的博客,奈何博客园要求博客要有篇幅,所以我的那三篇博客并没有上到博客园首页,但是我觉得这个方法应该让更多的小伙伴

javascript实现五角星效果

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>JQuery Adventures</title> <style> *{ padding:0; margin:0;} li { list-style:none;} #ul1 {

前端设计与实现,使用拖拽来调整交友对象的评分功能

我的一个交友网站,其独特的流程包括,用户通过搜索发现潜在对象,给潜在对象加关注和打分,使用获得2012诺贝尔经济奖的特殊匹配算法计算出相互匹配的对象并推荐給相关用户.在这里,对交友对象的评分功能是此网站的基础功能,其方便和平滑与否关系重大.本视频演示我的设计与实现. 页内拖拽 跨页拖拽 一次点击把目标用户放入一个缓存区,然后利用分页控制走到目的页面,再进行拖拽.好处是能够实现精确控制. 想想看,你会如何设计这一功能? 其他特点 精确和强大的筛选器,让用户随心所欲的控制筛选条件. 常用的筛选组合放

jQuery实际案例⑥——图片跟随鼠标、五角星评分案例

一.图片跟随鼠标移动 1.要求:鼠标移动到哪,图片就要跟到哪 2.用到的事件:首先监听鼠标:$(document).mousemove(function(event){ }); //此时可以获取鼠标距离页面左侧.顶部的距离通过event.pageX.event.pageY,然后通过修改图片的left.top值即可. 二.五角星评分案例 1.如图:业务逻辑:①鼠标移入某颗星时,这颗及之前的都变实心:②未点击,移开评分区,所有星变空心:③点击,移开评分区,点击过的星及之前的变实心 2.用到的方法:e

[JavaScript] js 迅雷评分效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head>  

活动列表+星星评分功能(源码下载)

这是一个Demo,内容主要是模仿一些网站的数据列表,实现评分功能.放缩功能. 下面是小Demo: 工具 一个星星评分插件+ jQuery1.8.2 思路 思路很简单,通过整张表格是由后台生成(StringBuilder)然后发送给前台页面填充出来的. 当点击点评按钮后,会调用jQuery的slideToggle()方法,执行动画. 关于Ajax部分 本Demo一共两处使用Ajax,第一处是加载页面的时候,生成页面table,第二处是点击提交的时候,将数据提交给服务器. 代码特别简单,就不贴出来了

javascript实现map的功能(转载)

/* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, value) 向MAP中增加元素(key, value) * remove(key) 删除指定KEY的元素,成功返回True,失败返回False * get(key) 获取指定KEY的元素值VALUE,失败返回NULL * element(index) 获取指定索引的元素(使用element.key,

iOS应用内集成AppStore评分功能

iOS应用内部实现App Store评分功能,笔着整理总结有三种方式,各位可根据自己需求自己选择.先介绍下评分功能实现的三种方式. 1,通用方式通过App内部打开网页形式,跳转到AppStore编辑评论,可评分,可评论. 优点:方便,快捷,不受系统版本限制,目前最常用的方式. 缺点:内部网页形式加载缓慢,等待时间长,加载失败概率大. 2,iOS 6.0以后 在app内部加载AppStore 展示app信息 优点:展示速度比方法三块快 缺点:不能直接跳转到评论编辑页面,需要手动点击评论+编辑评论

五角星评分小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>五角星评分案例</title> <style> * { padding: 0; margin: 0; } .comment { font-size: 40px; color: #ff3100; } .comment li { float: lef