轮播图(面向对象)

该博客详细介绍了如何使用JavaScript来创建轮播图,包括Utils工具类、LoadImage类和Carousel主体类的实现,涵盖了从图片加载到轮播效果的完整过程。
摘要由CSDN通过智能技术生成

轮播图,效果如下
效果图

一、js文件

1.Utils类
export default class Utils{
   
 static ce(type,style,parent){
   
        var elem=document.createElement(type);
        if(style){
   
            for(var prop in style){
   
                elem.style[prop]=style[prop];
            }
        }
        if(typeof parent==="string") parent=document.querySelector(parent);
        if(parent) parent.appendChild(elem);
        return elem;
    }}
2.LoadImage类
//声明LoadImage类继承EventTarget超类
export default class LoadImage extends EventTarget{
   
    list;  //预缓存的图片数组
    num=0;  //初始为0,每缓存一张照片,num++,用于遍历list内所有图片
    finishArr=[];  //将预缓存图片潜复制后加入到finishArr
    callBack;  //调用时以参数形式传入的函数,可以对全部加载完成后的finishiArr进行操作。
    static IMAGE_FINISH="imgFinish";  //为抛发事件设置常量事件名
    
    //构造函数(list: 存放图片src的数组,basePath:图片路径的相同部分;expandedName:图片的后缀名,执行最后返回finishArr数组的函数)
    constructor(list,basePath,expandedName,_callBack){
     
        
        //继承超类EventTarget内容
        super();

        //判断第二个参数是不是函数,
        if(basePath.constructor===Function)
        {
   

            //如果为函数,直接将参数内容赋给callBack
             this.callBack=basePath;

             //执行changeList函数,并把返回值赋予list
             this.list=this.changeList(list)
        }else{
   

            //如果不是函数,参数还是原来顺序,并且执行changeList函数
            this.callBack=_callBack;     
            this.list=this.changeList(list,basePath,expandedName)
        }
        //执行loadImage函数
        this.loadImage();
    }

    //changeList函数:将图片地址整合为整体的地址
    changeList(list,basePath,expandedName){
   

        //如果基础地址存在,然后判断基础地址有无/ ,然后把基础地址跟list的图片名整合,最终存入list李表里
        if(basePath){
   
            basePath=basePath.endsWith("/") ? basePath : basePath+"/";
            list=list.map(item=>basePath+item);
        }

        //如果后缀名存在
        if(expandedName){
   

            //遍历list,将list内的元素根据 . 分割
            list=list.map(item=>{
   
                var names=item.split(".")
                
                //如果list内元素包含后缀名,直接返还,如果不包含,将expandedName加在元素后部
                if(/jpg|png|jpeg|bmp|gif|webp/i.test(names[names.length-1])) return item;
                return item+(expandedName.includes(".") ? expandedName : "."+expandedName);
            })
        }
        //返还整合后的list
        return list;
    }
    //缓存图片函数
    loadImage(){
   
        //将img实例化
        var img=new Image();

        //设置监听事件,如果未加载完成,执行loadHandler函数
        this.loadFn=e=>this.loadHandler(e)
        img.addEventListener("load",this.loadFn);

        //加载图片路径,将图片缓存在浏览器里
        img.src=this.list[this.num];
    }
    loadHandler(e){
   
        //设置img为监听事件,即缓存的图片
        var img=e.currentTarget;

        //将图片浅复制,然后存入finishArr数组内
        this.finishArr.push(img.cloneNode(false));

        //通过num 遍历整个list数组,将图片所有路径依次加载一遍。即将所有图片都缓存到浏览器内,并且将所有图片浅复制后放入finishArr数组内。
        this.num++;
       
       //如果num超出数组长度,即所有图片都加载完成后,删除监听事件,监听函数置为null
        if(this.num>this.list.length-1){
   
            img.removeEventListener("load",this.loadFn);
            this.loadFn=null;

            //如果callBack参数存在,通过callBack函数对finishArr进行操作。
            if(this.callBack){
   
                this.callBack(this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值