欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實(shí)現(xiàn)服務(wù)五星好評

 更新時間:2022年09月01日 12:19:16   作者:Jonty_Chen  
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)服務(wù)五星好評,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了JS實(shí)現(xiàn)服務(wù)五星好評的具體代碼,供大家參考,具體內(nèi)容如下

html部分

<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <meta http-equiv="X-UA-Compatible" content="ie=edge">
? ? <title>Document</title>
</head>
<body>
? ? <script type="module">
? ? ? ? import Star from "./js/Star.js";

? ? ? ? document.addEventListener(Star.STAR_SELECTED_EVENT,starSelectedHandler);
? ? ? ? let ?star=new Star("服務(wù)評價");
? ? ? ? star.position=2;
? ? ? ? star.bool=true;
? ? ? ? star.appendTo(document.body);

? ? ? ? let ?star1=new Star("售后評價")
? ? ? ? star1.appendTo(document.body);
? ? ? ? function starSelectedHandler(e){
? ? ? ? ? ? console.log(e.position,e.content);
? ? ? ? }
? ? </script>
</body>
</html>

js Star.js部分

import Utils from "./Utils.js";
export default class Star{
? ? static STAR_SELECTED_EVENT="star_selected_Event";
? ? constructor(content,bool){
? ? ? ? // this就是new出的對象
? ? ? ? this.arr=[];
? ? ? ? this.position=-1;
? ? ? ? this.bool=bool;
? ? ? ? this.elem=this.createElem(content);
? ? }
? ? createElem(content){
? ? ? ? if(this.elem) return this.elem;
? ? ? ? let div=Utils.ce("div",{
? ? ? ? ? ? height:"35px",
? ? ? ? ? ? position:"relative"
? ? ? ? });
? ? ? ? let label=Utils.ce("label",{
? ? ? ? ? ? fontSize:"16px",
? ? ? ? ? ? marginRight: "10px",
? ? ? ? ? ? display:"inline-block",
? ? ? ? ? ? marginTop: "18px",
? ? ? ? },{
? ? ? ? ? ? textContent:content
? ? ? ? });
? ? ? ? div.appendChild(label);
? ? ? ? for(let i=0;i<5;i++){
? ? ? ? ? ? let span=Utils.ce("span",{
? ? ? ? ? ? ? ? display: 'inline-block',
? ? ? ? ? ? ? ? width:"16px",
? ? ? ? ? ? ? ? height:"16px",
? ? ? ? ? ? ? ? marginTop: "18px",
? ? ? ? ? ? ? ? backgroundImage:"url(./img/commstar.png)"
? ? ? ? ? ? });
? ? ? ? ? ? this.arr.push(span);
? ? ? ? ? ? div.appendChild(span);
? ? ? ? }
? ? ? ? this.face=Utils.ce("span",{
? ? ? ? ? ? display:"none",
? ? ? ? ? ? position:"absolute",
? ? ? ? ? ? width:"16px",
? ? ? ? ? ? height:"16px",
? ? ? ? ? ? backgroundImage:"url(./img/face-red.png)",
? ? ? ? ? ? backgroundPositionX:"0px",
? ? ? ? ? ? top:"0px"
? ? ? ? });
? ? ? ? div.appendChild(this.face);
? ? ? ? // 原本事件函數(shù)中的this是被偵聽的對象,現(xiàn)在通過箭頭函數(shù),this重新指回當(dāng)前實(shí)例化對象
? ? ? ? div.addEventListener("mouseover",e=>{
? ? ? ? ? ? this.mouseHandler(e);
? ? ? ? });
? ? ? ? div.addEventListener("mouseleave",e=>{
? ? ? ? ? ? this.mouseHandler(e);
? ? ? ? });
? ? ? ? div.addEventListener("click",e=>{
? ? ? ? ? ? this.clickHandler(e);
? ? ? ? })
? ? ? ? return div;
? ? }
? ? appendTo(parent){
? ? ? ? parent.appendChild(this.elem);
? ? }
? ? mouseHandler(e){
? ? ? ? if(this.bool) return;
? ? ? ? // e.currentTarget
? ? ? ? var num=this.arr.indexOf(e.target);
? ? ? ? if(e.type==="mouseover"){
? ? ? ? ? ? if(e.target.constructor!==HTMLSpanElement) return;
? ? ? ? ? ? this.setStar(index=>{
? ? ? ? ? ? ? ? return index<=num || index<=this.position;
? ? ? ? ? ? })
? ? ? ? ? ? Object.assign(this.face.style,{
? ? ? ? ? ? ? ? backgroundPositionX:-(this.arr.length-num-1)*20+"px",
? ? ? ? ? ? ? ? left:e.target.offsetLeft+"px",
? ? ? ? ? ? ? ? display:"block"
? ? ? ? ? ? })
? ? ? ? }else if(e.type==="mouseleave"){
? ? ? ? ? ? this.setStar(index=>{
? ? ? ? ? ? ? ? return index<=this.position;
? ? ? ? ? ? })
? ? ? ? ? ? this.face.style.display="none"
? ? ? ? }
? ? }
? ? clickHandler(e){
? ? ? ? if(this.bool) return;
? ? ? ? if(e.target.constructor!==HTMLSpanElement) return;
? ? ? ? this.position=this.arr.indexOf(e.target);
? ? ? ? // 當(dāng)使用回調(diào)函數(shù)時,this被重新指向,因此我們需要使用箭頭函數(shù)重新將this指向?qū)嵗膶ο?
? ? ? ?this.setStar(index=>{
? ? ? ? ? ?return index<=this.position;
? ? ? ?});
? ? ? ?let evt=new Event(Star.STAR_SELECTED_EVENT);
? ? ? ?evt.position=this.position;
? ? ? ?evt.content=this.elem.firstElementChild.textContent;
? ? ? ?document.dispatchEvent(evt);
? ? }
? ? setStar(fn){
? ? ? ? for(let i=0;i<this.arr.length;i++){
? ? ? ? ? ? if(fn(i)){
? ? ? ? ? ? ? ? this.arr[i].style.backgroundPositionY="-16px";
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? this.arr[i].style.backgroundPositionY="0px";
? ? ? ? ? ? }
? ? ? ? ? ?
? ? ? ? }
? ? }

}

js Utils.js部分

export default class Utils {
? ? static IMG_LOAD_FINISH = "img_load_finish";
? ? constructor() {

? ? }
? ? static ce(type, style, prop) {
? ? ? ? let elem = document.createElement(type);
? ? ? ? if (style) Object.assign(elem.style, style);
? ? ? ? if (prop) Object.assign(elem, prop);
? ? ? ? return elem;
? ? }
? ? static randomColor() {
? ? ? ? let c = "#";
? ? ? ? for (let i = 0; i < 6; i++) {
? ? ? ? ? ? c += Math.floor(Math.random() * 16).toString(16);
? ? ? ? }
? ? ? ? return c;
? ? }
? ? static random(min, max) {
? ? ? ? return Math.floor(Math.random() * (max - min) + min);
? ? }
? ? static loadImgs(imgList, baseUrl, handler, type) {
? ? ? ? let img = new Image();
? ? ? ? img.addEventListener("load", Utils.loadHandler);
? ? ? ? let url = Utils.getImgUrl(imgList[0], baseUrl, type);
? ? ? ? img.src = url;
? ? ? ? img.imgList = imgList;
? ? ? ? img.baseUrl = baseUrl;
? ? ? ? img.handler = handler;
? ? ? ? img.type = type;
? ? ? ? img.list = [];
? ? ? ? img.num = 0;
? ? }
? ? static loadHandler(e) {
? ? ? ? let img = this.cloneNode(false);
? ? ? ? this.list.push(img);
? ? ? ? this.num++;
? ? ? ? if (this.num > this.imgList.length - 1) {
? ? ? ? ? ? this.removeEventListener("load", Utils.loadHandler);
? ? ? ? ? ? if (this.handler) {
? ? ? ? ? ? ? ? this.handler(this.list);
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? let evt = new Event(Utils.IMG_LOAD_FINISH);
? ? ? ? ? ? evt.list = this.list;
? ? ? ? ? ? document.dispatchEvent(evt);
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? this.src = Utils.getImgUrl(this.imgList[this.num], this.baseUrl, this.type);
? ? }
? ? static getImgUrl(name, baseUrl, type) {
? ? ? ? let url = "";
? ? ? ? if (baseUrl) url += baseUrl;
? ? ? ? if (type) {
? ? ? ? ? ? if (name.indexOf(".") < 0) name += "." + type;
? ? ? ? ? ? else name = name.replace(/\.\w+$/, "." + type);
? ? ? ? }
? ? ? ? url += name;
? ? ? ? return url
? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • bootstrap中添加額外的圖標(biāo)實(shí)例代碼

    bootstrap中添加額外的圖標(biāo)實(shí)例代碼

    可以針對校驗(yàn)狀態(tài)為輸入框添加額外的圖標(biāo)。接下來通過本文給大家分享bootstrap中添加額外的圖標(biāo)實(shí)例代碼,需要的的朋友參考下吧
    2017-02-02
  • JavaScript中工廠函數(shù)與構(gòu)造函數(shù)示例詳解

    JavaScript中工廠函數(shù)與構(gòu)造函數(shù)示例詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript中工廠函數(shù)與構(gòu)造函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JavaScript常用事件介紹

    JavaScript常用事件介紹

    今天小編就為大家分享一篇關(guān)于JavaScript常用事件介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • webpack5處理圖片、圖標(biāo)字體、多媒體等靜態(tài)資源文件

    webpack5處理圖片、圖標(biāo)字體、多媒體等靜態(tài)資源文件

    在 webpack5 中內(nèi)置了 file-loader、url-loader、raw-loader, 可以直接通過配置實(shí)現(xiàn)常用功能,下面就來介紹一下webpack5處理圖片、圖標(biāo)字體、多媒體等靜態(tài)資源文件的實(shí)現(xiàn)方法,感興趣的可以了解一下
    2023-12-12
  • JavaScript隊(duì)列函數(shù)和異步執(zhí)行詳解

    JavaScript隊(duì)列函數(shù)和異步執(zhí)行詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript隊(duì)列函數(shù)和異步執(zhí)行的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JS運(yùn)算符簡單用法示例

    JS運(yùn)算符簡單用法示例

    這篇文章主要介紹了JS運(yùn)算符簡單用法,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript各種邏輯運(yùn)算符、數(shù)學(xué)運(yùn)算符、關(guān)系運(yùn)算符等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • JS實(shí)現(xiàn)玩轉(zhuǎn)風(fēng)車

    JS實(shí)現(xiàn)玩轉(zhuǎn)風(fēng)車

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)玩轉(zhuǎn)風(fēng)車,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Javascript 多瀏覽器兼容性問題及解決方案

    Javascript 多瀏覽器兼容性問題及解決方案

    不論是網(wǎng)站應(yīng)用還是學(xué)習(xí)js,大家很注重ie與firefox等瀏覽器的兼容性問題,畢竟這兩中瀏覽器是占了絕大多數(shù)。
    2009-12-12
  • js判斷對象是否擁有某個key的兩種方法對比

    js判斷對象是否擁有某個key的兩種方法對比

    JS中數(shù)組和對象是等同的,我們經(jīng)常遇到需要判斷一個key是否存在于對象中的情況,這篇文章主要給大家介紹了關(guān)于如何利用js判斷對象是否擁有某個key的兩種方法對比,需要的朋友可以參考下
    2023-12-12
  • JavaScript中使用stopPropagation函數(shù)停止事件傳播例子

    JavaScript中使用stopPropagation函數(shù)停止事件傳播例子

    這篇文章主要介紹了JavaScript中使用stopPropagation函數(shù)停止事件傳播例子,即阻止事件冒泡的一個方法,需要的朋友可以參考下
    2014-08-08

最新評論