JS实现星星评分功能实例代码(两种方法)

转载自   JS实现星星评分功能实例代码(两种方法)

一、方法1

1、用到图片

 

2、结构和样式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>ul {padding-left: 0;overflow: hidden;}ul li {float: left;list-style: none;width: 27px;height: 27px;background: url(img/star.gif)}ul li a {display: block;width: 100%;padding-top: 27px;overflow: hidden;}ul li.light {background-position: 0 -29px;}</style>
</head>
<body><ul><li class="light"><a href="javascript:;">1</a></li><li><a href="javascript:;">2</a></li><li><a href="javascript:;">3</a></li><li><a href="javascript:;">4</a></li><li><a href="javascript:;">5</a></li></ul>
</body>
</html>

li加了light的class就会变成亮星,就是换了背景位置,把空心的星星变成了实心的。所以js实现的时候点亮就是给li加一个light的类名。

效果:

 

3、交互js

<script>
var num=finalnum = tempnum= 0;
var lis = document.getElementsByTagName("li");
//num:传入点亮星星的个数
//finalnum:最终点亮星星的个数
//tempnum:一个中间值
function fnShow(num) {finalnum= num || tempnum;//如果传入的num为0,则finalnum取tempnum的值for (var i = 0; i < lis.length; i++) {lis[i].className = i < finalnum? "light" : "";//点亮星星就是加class为light的样式}
}
for (var i = 1; i <= lis.length; i++) {lis[i - 1].index = i;lis[i - 1].onmouseover = function() { //鼠标经过点亮星星。fnShow(this.index);//传入的值为正,就是finalnum}lis[i - 1].onmouseout = function() { //鼠标离开时星星变暗fnShow(0);//传入值为0,finalnum为tempnum,初始为0}lis[i - 1].onclick = function() { //鼠标点击,同时会调用onmouseout,改变tempnum值点亮星星tempnum= this.index;}
}
</script>

这样设计的一个关键点在于,mouout时保存一个值用于让星星变暗,初始为0(0颗星变亮就是全暗),不点击的话只要鼠标离开所有星星都是暗的,click事件会触发一次mouseover和一次mouseout,所以点击时改变tempnum确定鼠标离开时几颗星亮,这个值会一直保持,直到下次点击时改变它。

最终效果:

 

二、方法2

1、用到图片

 

2、效果如下

 

3、完整代码如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>demo of starof</title><style>ul{padding:0;margin: 0;}li{list-style: none;}/*星星评分*/.scoremark{width:154px;position:relative;margin-top:50px;}.scoremark .score {float: right;display: block;margin: 0 0 0 10px;font-size: 18px;line-height: 22px;font-weight: bold;color: #f70;}.scoremark .star {float: right;display: block;position: relative;width: 116px;height: 20px;background: url(img/star.png) no-repeat 0px -20px;}.scoremark .ystar {position: absolute;top: 0;left: 0;width: 116px;height: 20px;background: url(img/star.png) no-repeat 0px 0px;}.scoremark .star ul {width: 120px;height: 20px;position: absolute;top: 0;left: 0;}.scoremark .star ul:hover {background: url(img/star.png) no-repeat 0px -20px;}.scoremark .star li {float: left;width: 24px;height: 20px;}.scoremark .star li a {display: block;width: 24px;height: 20px;overflow: hidden;text-indent: -9999px;position: absolute;z-index: 5;}.scoremark .star li a:hover {background: url(img/star.png) no-repeat 0px 0px;z-index: 3;left: 0}.scoremark .star a.one-star {left: 0;}.scoremark .star a.one-star:hover {width: 24px}.scoremark .star a.two-stars {left: 24px;}.scoremark .star a.two-stars:hover {width: 48px}.scoremark .star a.three-stars {left: 48px;}.scoremark .star a.three-stars:hover {width: 72px}.scoremark .star a.four-stars {left: 72px;}.scoremark .star a.four-stars:hover {width: 96px}.scoremark .star a.five-stars {left: 96px;}.scoremark .star a.five-stars:hover {width: 120px;}.scoremark .tips {position: absolute;top: -28px;left: 0;width: 40px;height: 21px;color: #333;line-height: 20px;padding: 0 0 5px 0;text-align: center;background: url(img/ico.png) no-repeat;z-index: 6;font-size: 12px;}</style><script src="http://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
</head>
<body><div id="scoremark" class="scoremark scores"><em class="score">8.0</em><span class="star"><span class="ystar" style="width:80%"></span><ul><li><a href="javascript:void(0)" data-name="很差" class="one-star">1</a></li><li><a href="javascript:void(0)" data-name="较差" class="two-stars">2</a></li><li><a href="javascript:void(0)" data-name="一般" class="three-stars">3</a></li><li><a href="javascript:void(0)" data-name="较好" class="four-stars">4</a></li><li><a href="javascript:void(0)" data-name="很好" class="five-stars">5</a></li></ul></span><div style="left: 0px; display: none;" class="tips"></div></div>
<script>
//星星评分
starScore($(".scoremark"));
function starScore(star){star.find(".star ul li a").mouseenter(function(){var txt = $(this).attr("data-name");var x = $(this).parent("li").index();star.find(".tips").html(txt).css("left",-6+x*24).show();});star.find(".star ul li a").mouseleave(function(){star.find(".tips").html("").css("left",0).hide();}); 
}
</script>
</body>
</html>

4、原理

4.1html结构

<div id="scoremark" class="scoremark scores"><em class="score">8.0</em><span class="star"><span class="ystar" style="width:80%"></span><ul><li><a href="javascript:void(0)" data-name="很差" class="one-star">1</a></li><li><a href="javascript:void(0)" data-name="较差" class="two-stars">2</a></li><li><a href="javascript:void(0)" data-name="一般" class="three-stars">3</a></li><li><a href="javascript:void(0)" data-name="较好" class="four-stars">4</a></li><li><a href="javascript:void(0)" data-name="很好" class="five-stars">5</a></li></ul></span><div style="left: 0px; display: none;" class="tips"></div></div>

简单描述下原理:主要是多层背景的覆盖关系

首先是结构:.star下面包含了两层,一层是ystar,一层是ul。

4.1、实现4个星星的评分效果

外层.star定宽,背景图为空心灰色的星星。

里面.ystar代表点亮的星星,它的背景是实心的黄色星星,如果有4颗亮星,就设置.ystar的宽度为80%。2颗为40%。

4.2、实现鼠标hover上去星星点亮的效果

主要是通过css控制。关键是通过:hover实现的。

ul:hover时加上了空心灰色的星星背景图。

a:hover时,宽度变成前几个星星的宽度。

这样在hover时,其实有4层背景,比如第二个星星hover时,从下到上依次是

.star 暗星100%宽度.ystar 亮星 80宽度ul 暗星100%宽度.two-stars 40%宽度

4.3、鼠标hover显示tip

通过js获取a的data-name实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL on Linux Run on Docker

摘要 SQL Server 2016以及SQL on Linux版本已经支持跑在Docker容器中&#xff0c;也展示微软拥抱开源的决心和勇气。这篇博文就是以SQL on Linux为例&#xff0c;看看如何将SQL Server实例部署在Docker容器中。 背景 大概在两个月之前&#xff0c;在SQL On Linux刚发布预览版本…

三条中线分的六个三角形_八年级数学上册:三角形已知两条边如何求第三边

三角形一、定义&#xff1a;由不在同一条直线上的三条线段首尾顺次相接所组成的平面图形叫做三角形。1、三角形的内角&#xff1a;三角形的没两条边所组成的角叫做三角形的内角2、三角形的外角&#xff1a;三角形的任意一边与另一边的反向延长线所组成的角叫做三角形的外角。二…

ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java

/** * Title: BaseDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:44:53 * version V1.0 */ package org.dao.impl;import java.io.Serializable; import java.lang…

Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事

编者语&#xff1a;入门总是用一个hello world&#xff0c;总会让人觉得写code会是很容易的事。开篇绑定了一下微信SDK,不会有太多的难点&#xff0c;可是接下来的这个例子如果欠缺一些耐心&#xff0c;估计你整个人就崩溃了(我从来不会放弃任何的事)。ps这里得谢谢CSDN回帖的人…

ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java

/** * Title: DeptDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:57:37 * version V1.0 */ package org.dao.impl;import java.io.Serializable; import java.util…

堆排序代码实现

package com.atguigu.tree;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/26* 描述*/ public class HeapSort {public static void main(String[] args) {//要求将数组进行升序排序int arr[]{4,6,8,5,9};heapSort(arr);}//编写一个堆排序的方法public static void…

android 监听安装来源_Flutter插件开发之APK自动安装

点击上方的终端研发部&#xff0c;右上角选择“设为星标”每日早9点半&#xff0c;技术文章准时送上公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料往期文章记五月的一个Android面试经今日头条屏幕适配方案落地研究图解算法&#xff1a;说一道字节跳动的算法题除…

JavaScript学习总结(一)——JavaScript基础

转载自 JavaScript学习总结(一)——JavaScript基础 一、JavaScript语言特点 1.1、JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应&#xff0c;无须经过Web服务程序。它对用户的响应&#xff0c;是采用以事件驱动的方式进行的。所谓事件驱动…

idea下使用springinitializr创建项目时 初始化失败的解决

idea自带的地址无使用使用阿里的就可以了 idea下使用springinitializr创建项目时 初始化失败的解决 周山 关注 2020.08.05 13:32:26字数 10阅读 1,085 image.png 修改初始化创建时Custom处 https://start.aliyun.com/ image.png

ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java

/** * Title: EmpDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:05:13 * version V1.0 */ package org.dao.impl;import java.io.Serializable; import java.util…

如何使Mac Docker支持SQL on Linux容器Volume特性

问题引入 这天老鸟火急火燎的找到菜鸟&#xff1a;“鸟儿啊&#xff0c;按照你之前的文章SQL on Linux Run on Docker&#xff0c;当我销毁SQL on Linux Docker容器以后&#xff0c;我容器中的所有数据库数据丢失啦&#xff0c;怎么办&#xff0c;怎么办啊&#xff1f;”。菜鸟…

JavaScript学习总结(二)——逻辑Not运算符详解

转载自 JavaScript学习总结(二)——逻辑Not运算符详解 在JavaScript 中&#xff0c;逻辑NOT运算符与C和Java中的逻辑 NOT 运算符相同&#xff0c;都由感叹号&#xff08;!&#xff09;表示。与逻辑 OR 和逻辑 AND 运算符不同的是&#xff0c;逻辑 NOT 运算符返回的一定是 Boo…

赫夫曼树+图解

图解 代码实现 package com.atguigu.huffmanTree;import javax.swing.*; import java.awt.geom.RoundRectangle2D; import java.util.ArrayList; import java.util.Collections; import java.util.List;/*** 创建人 wdl* 创建时间 2021/3/26* 描述*/ public class HuffmanTree…

四足爬行机器人运动_有自我意识机器人横空出世,还能自我复制,专家表示需警惕其失控...

有自我意识是什么样的&#xff1f;人类自身其实就是有自我意识的生命体&#xff0c;那作为有自我意识的生命体&#xff0c;你想过自我意识是指哪些特征吗&#xff1f;指尖科技说小编先跟你探讨一下&#xff1a;1.主动做事情。就是说在没有其他人控制的情况下&#xff0c;它可以…

IDEA中创建maven项目详细步骤,很清晰

IDEA中创建maven项目详细步骤&#xff0c;很清晰_格子衫111的博客-CSDN博客_idea maven构建 前言 在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境 。 如还未配置安装Maven的&#xff0c;请先下载安装。如何下载安装&#xff0c;可参考我另外篇文章&#xff1…

ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java

IEmpService.java的代码&#xff1a; /** * Title: IEmpService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:08:05 * version V1.0 */ package org.service;import org.…

微软AirSim,一个无人机和机器人的模拟器

微软开发并开源了AirSim&#xff0c;一个用于模拟无人机在全世界的飞行的工具。这个模拟器基于虚幻引擎&#xff08;Unreal Engine&#xff09;构建&#xff0c;微软很快会增加对机器人和其它类型移动设备的支持。 微软在内部开发了航空信息系统和机器人平台&#xff0c;这个研…

JavaScript学习总结(四)——逻辑OR运算符详解

转载自 JavaScript学习总结(四)——逻辑OR运算符详解 在JavaScript中&#xff0c;逻辑OR运算符用||表示 var bTrue true;var bFalse false;var bResult bTrue || bFalse; 下面的真值表描述了逻辑AND运算符的行为: 运算数 1运算数 2结果truetruetruetruefalsetruefals…

android 渐变蒙版_干货分享(第八期):PS蒙版教学,利用蒙版制造渐隐效果

哈喽&#xff0c;大家好&#xff0c;在下乔安生&#xff0c;之前已经跟大家说过图层蒙版的一个应用。今天再跟大家分享下&#xff0c;如何利用蒙版制造出渐隐的一个效果。利用图层蒙版 &#xff0c;为图像增加渐隐的感觉&#xff0c;然后利用画笔工具来修改图层蒙版以及改变图层…

ssh(Spring+Spring mvc+hibernate)——DeptController.java

/** * Title: DeptController.java * Package org.action * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-27 上午10:54:42 * version V1.0 */ package org.action;import java.util.List;import org.entity.Dept;…