JSが5つ星の賞賛を獲得

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

ビジネス ロジックとしては、まず使用する必要があるすべてのタグとスタイルを作成し、次に星、スコア、スマイリー フェイス、クリックの対応する動作を記述して、メンテナンスしやすいように抽象化する必要があります。そしてクリックするとイベントをスローし、対応する名前、スコアなどの情報を記録し、Cookie に保存します。

作成プロセス中に、1 つは位置の問題です。これは、appendChild を作成せずに実行すると発生しやすくなります。2 つ目は、動作を追加するときに星とスマイリー フェイスの位置を調整する方法です。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
</head>
<本文>
    <スクリプトタイプ="モジュール">
        「./js/Star.js」からStarをインポートします。
        let list=["製品の適合性","ショップのサービス態度","速達スピード","宅配便サービス","速達梱包"]
        リスト.forEach(項目 => {
            star = new Star(item); とします。  
            star.appendTo("本文");
            star.addEventListener("change",changeHandler);
        });

        関数changeHandler(e){
            var date = 新しい Date();
            日付.setMonth(11);
            Cookie を設定します(e.scoreList、日付);
            
            function setCookie(data,date){ //JSON形式でCookieに保存します var str=date===undefined ? "" : ";expires="+date.toUTCString();
                for(var prop in data){
                    var 値=データ[prop];
                    if(typeof value==="object" && value!==null) value=JSON.stringify(value);
                    document.cookie=prop+"="+値+str;
                }
            }
        }
    </スクリプト>
</本文>
</html>
export default class Component{ // warp メソッドと appendTo メソッドを作成します elem;
    コンストラクタ(){
        this.elem = this.createElem();
    }
    要素を作成します(){
        if(this.elem) は this.elem を返します。
        div = document.createElement("div"); とします。
        div を返します。
    }
    親に追加{
        if(typeof parent==="string")parent=document.querySelector(parent);
        親要素に子要素を追加します。
    }
}
「./Component.js」からコンポーネントをインポートします。
デフォルトクラス Star をエクスポートし、Component を拡張します{
    ラベル="";
    スコア;
    顔;
    スターコン;
    静的STAR_NUM = 5;
    星Arr=[];
    静的スタースコアリスト = [];
    位置=-1;
    コンストラクター(_label){
        素晴らしい();
        this.label=_label;
        オブジェクト.assign(this.elem.style,{
            幅:"自動",
            高さ:"16px",
            フロート:"左",
            パディング下部:"10px",
            右余白:"20px",
            パディング上部:"16px",
        })
        Star.StarScoreList[_label]=0;
        _label を作成します。
        this.createStar();
        this.createScore();
    }
    ラベルを作成します(_label){
        ラベルを document.createElement("div");
        ラベル.textContent=_label;
        オブジェクト.assign(ラベル.style,{
            フロート:"左",
            高さ: "16px",
            行の高さ: "16px",
            右余白: "10px",
            オーバーフロー: "非表示",
            空白: "nowrap",
            テキストオーバーフロー: "省略記号",
            フォント: '12px/150% tahoma、arial、Microsoft YaHei、Hiragino Sans GB,"\u5b8b\u4f53",サンセリフ',
            色: "#666"
        });
        this.elem.appendChild(ラベル);
    }
    スターを作成します(){
        this.starCon = document.createElement("div");
        オブジェクト.assign(this.starCon.style,{
            フロート:"左",
            高さ:"16px",
            位置:"相対",
            上マージン:"1px"
        })
        for(let i=0;i<Star.STAR_NUM;i++){
            star = document.createElement("div"); とします。
            オブジェクト.assign(star.style,{
                背景画像:"url(./img/commstar.png)",
                幅:"16px",
                高さ:"16px",
                フロート:"左",
            })
            this.starArr.push(星);
            this.starCon.appendChild(スター);
        }
        オブジェクト.assign(this.face.style,{
            幅:"16px",
            高さ:"16px",
            背景画像:"url(./img/face-red.png)",
            位置:"絶対",
            上:"-16px",
            表示:"なし"
        });
        this.starCon.appendChild(this.face);
        this.elem.appendChild(this.starCon);
        this.starCon.addEventListener("mouseover",e=>this.mouseHandler(e))
        this.starCon.addEventListener("クリック",e=>this.mouseHandler(e))
        this.starCon.addEventListener("mouseleave",e=>this.mouseHandler(e))
        this.face=document.createElement("div");
           
    }
    スコアを作成します(){
        this.score=document.createElement("span");
        オブジェクト.assign(this.score.style,{
            位置:"相対",
            幅:"30px",
            高さ:"16px",
            上:"-2px",
            左余白:"10px",
            行の高さ:"16px",
            テキスト配置:"右",
            色:"#999",
            フォント:"12px/150% tahoma、arial、Microsoft YaHei、Hiragino Sans GB、sans-serif",
        });
        this.score.textContent="0 ポイント";
        this.starCon.appendChild(this.score);
    }
    mouseHandler(e){ //マウスの動作 let index=this.starArr.indexOf(e.target);
        スイッチ(e.type){
            ケース「マウスオーバー」:
                if(インデックス<0) 戻り値:
                this.changeFace(インデックス);
                this.changeScore(インデックス+1);
                this.changeStar(インデックス+1);
                壊す;
            「クリック」の場合:
                this.pos=インデックス;
                これをディスパッチします。
                壊す;
            ケース「マウスリーブ」:
                this.changeStar(this.pos+1);
                this.changeFace(this.pos);
                this.changeScore(this.pos+1);
                壊す;
            デフォルト:
                戻る;
        }
    }
    星を変える(n){
        for(let i=0;i<this.starArr.length;i++){
            もし(i<n){
                this.starArr[i].style.backgroundPositionY="-16px";
            }それ以外{
                this.starArr[i].style.backgroundPositionY="0px";
            }
        }
    }
    スコア変更(n){
        this.score.textContent=n+"ポイント";
        n===0の場合{
            this.score.style.color="#999";
            
        }それ以外{
            スコアスタイルカラー="#e4393c";
        }
    }
    フェイスを変更する(n){
        n<0の場合{
            this.face.style.display="なし";
            戻る;
        }
        let index=Star.STAR_NUM-n-1; //画像のため、ここのスマイリー フェイスは反転されています this.face.style.display="block";
        this.face.style.backgroundPositionX=-index*20+"px";
        this.face.style.left=this.starArr[n].offsetLeft+"px";
    }
    スコア変更(n){
        this.score.textContent=n+"ポイント";
        n===0の場合{
            this.score.style.color="#999";
        }それ以外{
            スコアスタイルカラー="#e4393c";
        }
    }
    急送(){
        // コンソールログ("aaa")
        Star.StarScoreList[this.label]=this.pos+1;
        var evt = 新しいイベント("change");
        evt.score=this.pos+1;
        evt.label=このラベル;
        evt.scoreList=Star.StarScoreList;
        this.dispatchEvent(evt);
    }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JSは5つ星の賞賛効果を達成
  • JavaScript で 5 つ星の製品評価を実装
  • jQuery に基づいて 5 つ星のレビューを実装する
  • jQueryで実装した5つ星レビュー機能【事例】
  • jQuery によるレイヤーベースの 5 つ星評価機能を模倣する方法
  • jsは5つ星評価機能を実現する
  • 5つ星評価機能を実現するJavaScript
  • 5 つ星評価コードを実装する JavaScript (ソース コードのダウンロード)
  • JSとJQueryはそれぞれ淘宝網の五つ星賞賛の特殊効果を実現

<<:  MySQL 8.0.21 のインストールと設定方法のグラフィックチュートリアル

>>:  Tomcat9 のダウンロード、インストール、設定 + Eclipse への統合に関する詳細なチュートリアル

推薦する

XHTML 特殊文字コレクション

注意&#160;ノーブレークスペース = ノーブレークスペース、 iexcl ¡ &...

Mysqlのprepare前処理の具体的な使用法

目次1. 前処理2. 前処理塗布方法A. 例: B. 実行計画の変更を追跡するための前処理C. スト...

mysql5.7.18 のインストール時にエントリが見つからない問題の解決方法

mysql5.7.18のインストール時に次の問題が発生しました: プログラム入力ポイントfesetr...

MySql 組み込み関数の自習知識ポイントまとめ

文字列関数文字ascii(str)のASCIIコード値をチェックし、strが空の文字列の場合は0を返...

Vueのレスポンシブシステムの原理の詳細な説明

目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...

ティックアニメーション効果を作成するための svg+css または js

以前、上司からログイン後にチェックマークを表示できるプログラムを作るように言われたのですが、Baid...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...

Linux での mysql および mysql.sock のインストールに関する問題

最近、Linux に Aphace、mysql、php をインストールするときに多くの問題に遭遇しま...

CSS の border 属性と display 属性の使い方の簡単な分析

境界プロパティの概要borderプロパティは要素の境界を設定します。境界線の3要素は、太さ、線の種類...

ウェブページ制作と饅頭の関係(体験の共有)

昨日は遅くまで寝ていて、一日中起きていました。私の年齢では、夜更かしして本を書くのはもう無理のようで...

MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字...

docker run によって起動されたコンテナがハングしてデータが失われた場合の対処方法

シナリオの説明あるシステムでは、機能サービスはdocker stack deploy xxxで起動し...

Vueは小さな天気予報アプリケーションを実装します

これは私が Vue フレームワークを独学していたときに真似したウェブサイトです。いくつかの都市の天気...

Celery と Docker を使用して Django で定期的なタスクを処理する方法

Django アプリケーションを構築して拡張していくと、必然的に特定のタスクをバックグラウンドで自動...