日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時間:2023/12/3 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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事件會觸發(fā)一次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實現。

總結

以上是生活随笔為你收集整理的JS实现星星评分功能实例代码(两种方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。