[解決済み] jQueryとCSSで数字を星の数だけ表示させる
質問
jqueryのプラグインを見ていて、数字(4.8618164など)を5段階中4.8618164の星にするためにそのプラグインをどのように適応させればいいのか疑問に思いました。基本的には、jQuery/JS/CSSを使用して5つ星の評価システムで満たされた星に数字<5を解釈する。
これは、すでに利用可能な番号から星の評価を表示/表示するだけで、新しい評価の投稿を受け付けないことに注意してください。
どのように解決するのですか?
小さな画像と、自動生成されたspan要素を1つだけ使用した解決策をご紹介します。
CSS
span.stars, span.stars span {
display: block;
background: url(stars.png) 0 -16px repeat-x;
width: 80px;
height: 16px;
}
span.stars span {
background-position: 0 0;
}
画像
![]()
(ソース ulmanen.fi )
注意 する はありません。 上記の画像にホットリンクしてください。自分のサーバーにファイルをコピーして、そこから使ってください。
jQuery
$.fn.stars = function() {
return $(this).each(function() {
// Get the value
var val = parseFloat($(this).html());
// Make sure that the value is in 0 - 5 range, multiply to get width
var size = Math.max(0, (Math.min(5, val))) * 16;
// Create stars holder
var $span = $('<span />').width(size);
// Replace the numerical value with stars
$(this).html($span);
});
}
星を半分か四分の一の大きさに制限したい場合は、以下の行を
var size
の行を追加します。
val = Math.round(val * 4) / 4; /* To round to nearest quarter */
val = Math.round(val * 2) / 2; /* To round to nearest half */
HTML
<span class="stars">4.8618164</span>
<span class="stars">2.6545344</span>
<span class="stars">0.5355</span>
<span class="stars">8</span>
使用方法
$(function() {
$('span.stars').stars();
});
出力
![]()
(ソース ulmanen.fi )
デモ
<ブロッククオートhttp://www.ulmanen.fi/stuff/stars.php
これはおそらくあなたのニーズに合うでしょう。この方法では、スリークォーターやその他の星の幅を計算する必要はなく、ただfloatを与えるだけで星が表示されます。
星がどのように表示されるかについて、少し説明する必要があるかもしれません。
このスクリプトでは、2 つのブロックレベルの span 要素を作成します。どちらのスパンも、最初は 80px * 16px のサイズと、背景画像 stars.png を取得します。スパンはネストされているので、スパンの構造は次のようになります。
<span class="stars">
<span></span>
</span>
外側のスパンには
background-position
の
0 -16px
. これで、外側のスパンのグレーの星が見えるようになりました。外側のスパンの高さは16pxで
repeat-x
であるため、5個の灰色の星が表示されるだけです。
一方、内側のスパンには
background-position
の
0 0
で、黄色い星だけが見えるようになります。
これはもちろん、star_yellow.png と star_gray.png という2つの別々の画像ファイルで動作します。しかし、星の高さは固定されているので、簡単に1つの画像にまとめることができます。これは CSSスプライト技法 .
さて、スパンが入れ子になっているため、自動的に重なって表示されます。デフォルトでは、両方のスパンの幅が80pxのとき、黄色の星は灰色の星を完全に隠してしまいます。
しかし、内側のスパンの幅を調整すると、黄色い星の幅が小さくなり、グレーの星が見えてきます。
アクセシビリティの観点からは、floatの数字を内側のスパンの中に残し、それを
text-indent: -9999px
で隠し、CSS をオフにしている人が少なくとも星の代わりに浮動小数点数を見ることができるようにした方が賢明でしょう。
これで少しは理解できたでしょうか。
2010年10月22日更新
さらにコンパクトに、さらにわかりやすく ワンライナーにもしぼれる。
$.fn.stars = function() {
return $(this).each(function() {
$(this).html($('<span />').width(Math.max(0, (Math.min(5, parseFloat($(this).html())))) * 16));
});
}
関連
-
[解決済み] javascript(またはjQuery)を使って::beforeや::afterなどのCSS疑似要素を選択し、操作する。
-
[解決済み] jQuery/JavaScriptを使用してすべてのCSSクラスを削除するにはどうすればよいですか?
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] ECMAScriptとは?
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?
-
[解決済み] これは純関数ですか?