How to optimize a carousel plug-in based on JQ and ES6

topic description

use a subclass because you want to add a subclass that fades in and out of the carousel, so the common method is placed in the parent class. The if judgment at the beginning of autoplay feels a bit troublesome and wants to be separated by multiple functions, but it is written to find that there are more callbacks. Is it better to make more repetitive code or write a callback?

related codes

/ / Please paste the code text below (do not replace the code with pictures)
; (function (window, document) {

)
let defaultSetting = { //
    "interval": 2000
}
class Carousel {
    /*
     *@param userSetting 
     */
    constructor(userSetting) {
        let self = this;
        self.setting = Object.assign(defaultSetting, userSetting); //
        self.warp = $(self.setting.warp); //
        self.imgBox = self.warp.find(".img-box"); //
        self.dots = self.warp.find(".dot-box").children().children(); //
        self.lBtn = self.warp.find(".direction").children().eq(0); //
        self.rBtn = self.warp.find(".direction").children().eq(1); //
        self.len = self.imgBox.children().length; //
        self.timer = null; //
        self.bool = true;
        this.warp.mouseenter(function() {
            self.stop();
            self.lBtn.fadeIn(200);
            self.rBtn.fadeIn(200);
        })
        this.warp.mouseleave(function(){
            self.start()
            self.lBtn.fadeOut(200);
            self.rBtn.fadeOut(200);
        })
        this.dots.click(function(){
            self.autoPlay(null,$(this).index())
        })
    };
    start(){
        this.timer = setInterval(this.autoPlay.bind(this),this.setting.interval)
    };
    stop(){
       clearInterval(this.timer)
    };
    dotChange(index){
        this.dots.eq(index).addClass("active").siblings().removeClass("active");
    }
}
class silde extends Carousel {
    constructor(userSetting) {
        super(userSetting)
        this.init();
    };
    init() {
        let self = this;
        //
        self.width = self.warp.width()
        //
        self.index = 1;
        self.cloned()
        self.rBtn.click(function() {
            self.autoPlay()
        });
        self.lBtn.click(function() {
            self.autoPlay("left")
            let imgBox = self.imgBox
            if(self.index > 0){
                self.index--
            }else{
                self.index = self.len
            }
            console.log(self.index);
            self.move(imgBxo,self.index)
        })
        //
        self.start()
    };
    cloned() {
        let self = this;
        let first = self.imgBox.children("li:first-child").clone(true);
        let last = self.imgBox.children("li:last-child").clone(true);
        self.imgBox.append(first)
        self.imgBox.prepend(last)
    };
    /*
     * @param direction 
     * @param index 
     * 
     */
    autoPlay(direction, index) {
        let self = this;
        if(self.bool) {
            self.bool = false;
            if(index != undefined){
                self.index = index+1;
            }else{
                if(direction != "left") {
                self.indexPP
            } else {
                self.index--
            }
            }
            self.imgBox.animate({
                "margin-left": self.index * -(self.width) + "px"
            }, 300, function() {
                if(self.index > self.len) {
                    //
                    self.index = 1;
                    self.imgBox.css({
                        "margin-left": self.index * -(self.width) + "px"
                    })
                }
                if(self.index < 1) {
                    //
                    self.index = self.len;
                    self.imgBox.css({
                        "margin-left": self.index * -(self.width) + "px"
                    })
                }
                //
                self.dotChange(self.index-1);
                self.bool = true;
            })
        }
    };
}
window.silde = silde;

}) (window, document)

let s = new silde ({

)
"warp": "-sharpmyCarousel"

})

Jul.07,2022
MySQL Query : SELECT * FROM `codeshelper`.`v9_news` WHERE status=99 AND catid='6' ORDER BY rand() LIMIT 5
MySQL Error : Disk full (/tmp/#sql-temptable-64f5-1b3e8d1-2bb9b.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
MySQL Errno : 1021
Message : Disk full (/tmp/#sql-temptable-64f5-1b3e8d1-2bb9b.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
Need Help?