国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS實現星星評分功能實例代碼(兩種方法)

2019-11-20 09:44:44
字體:
來源:轉載
供稿:網友

一、方法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實現。

以上所述是小編給大家介紹的JS實現星星評分功能實例代碼(兩種方法)的詳細內容,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的,在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大埔区| 淮南市| 彭阳县| 县级市| 军事| 连城县| 资源县| 深圳市| 大埔县| 抚松县| 瑞昌市| 永吉县| 呼伦贝尔市| 大宁县| 平塘县| 陵川县| 沙洋县| 黎城县| 聊城市| 那坡县| 定襄县| 固安县| 平陆县| 太谷县| 高雄县| 滦平县| 玉屏| 乐都县| 石阡县| 大埔县| 望江县| 水富县| 韶关市| 古浪县| 米易县| 石泉县| 黔南| 米易县| 桃江县| 凤山县| 公主岭市|