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;三角形的任意一边与另一边的反向延长线所组成的角叫做三角形的外角。二…

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

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

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

如何使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;它可以…

微软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…

LEANSOFT领航员 – 基于Docker的DevOps实战培训

2016年&#xff0c;LEANSOFT推出了一系列广受开发人员欢迎的培训&#xff0c;包括《构建高效DevOps团队》&#xff0c;《基于Azure的容器化DevOps数据中心》和《Docker基础培训》。在这些培训中&#xff0c;我们得到了很多反馈&#xff0c;大家对使用Docker来支持DevOps的场景有…

高德地图路线规划 时间_路线准、播报拥堵及时,这次自驾出行高德地图可算是帮了大忙...

在我们日常生活中,自驾已经成为一种很普遍的出行方式,不仅在时间上灵活,特别是一家人出行也比较方便。伴随自驾出行的除了爱车外,一款靠谱的地图导航软件也成为了必不可少的旅行伙伴。目前比较常用的地图导航软件当属高德、百度和腾讯,不少人手机里都会有这三款软件中的其中一个…

JavaScript学习总结(七)——JavaScript函数(function)

转载自 JavaScript学习总结(七)——JavaScript函数(function) 一、函数基本概念 为完成某一功能的程序指令(语句)的集合&#xff0c;称为函数。 二、JavaScript函数的分类 1、自定义函数(我们自己编写的函数)&#xff0c;如&#xff1a;function funName(){} 2、系统函数(J…

JavaScript学习总结(八)——JavaScript数组

转载自 JavaScript学习总结(八)——JavaScript数组 JavaScript中的Array对象就是数组&#xff0c;首先是一个动态数组&#xff0c;无需预先制定大小&#xff0c;而且是一个像Java中数组、ArrayList、Hashtable等的超强综合体。 一、数组的声明 常规方式声明&#xff1a; 1、…

命令点无效怎么处理_CAD执行修改命令,你试过重复选择对象吗?

你在执行命令的时候&#xff0c;是习惯先选择对象还是之后才选择对象的呢&#xff1f;不知道细心的你有没有发觉&#xff0c;明明已经先选择对象了才执行命令&#xff0c;为什么之后还要重复选择对象&#xff1f;这里可以分几种情况来讨论一下。CAD版本&#xff1a;中望CAD 202…

一起脱去小程序的外套和内衣 - 微信小程序架构解析

作者介绍&#xff1a; 渠宏伟&#xff0c;腾讯高级工程师&#xff0c;从事Web前端开发5年&#xff0c;先后负责企鹅电竞、腾讯视频VIP、腾讯OA开发框架、腾讯微信HR助手等项目。对Web前端架构、.NET架构有丰富的经验。 | 导语 微信小程序的公测掀起了学习小程序开发的浪潮&…

JavaScript学习总结(九)——Javascript面向(基于)对象编程

转载自 JavaScript学习总结(九)——Javascript面向(基于)对象编程 一、澄清概念 1.JS中"基于对象面向对象" 2.JS中没有类(Class)&#xff0c;但是它取了一个新的名字叫“原型对象”&#xff0c;因此"类原型对象" 二、类(原型对象)和对象(实例)的区别与联…