javascript_面向对象_轮播图(淡入淡出)_ES3_使用prototype和构造函数

解释:

       1、该轮播图的切换效果是淡入淡出

       2、该轮播图使用了prototype属性,解决了上一版“http://blog.csdn.net/jiang7701037/article/details/78963256”

javascript_面向对象_轮播图(淡入淡出)没有使用prototype的问题

效果图:


代码:
HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        *{
            margin:0;
            padding:0;
            list-style: none;
        }

        #box{
            position:relative;
            width:400px;
            height:300px;
        }

        #box2{
            position:relative;
            width:600px;
            height:200px;
        }
    </style>
</head>
<body>
    <div id="box">

    </div>
    <br/><br/><br/><br/>
    <div id="box2">

    </div>
</body>
</html>
<script type="text/javascript" src="js/sliderShowPlugin.js"></script>
<script type="text/javascript">

function $(id){
    return document.getElementById(id);
}

window.onload = function () {
    new SlideShow(
        {
            "boxDom":$("box"),
            "width":400,
            "height":300,
            "imgs":["img/timg1.jpg","img/timg3.jpg","img/timg2.jpg"],
            "timespace":3000,
            "btnWidth":20,
            "btnHeight":20,
            "btnColor":"orange",
            "btnHighColor":"red"
        }
    );

    new SlideShow(
        {
            "boxDom":$("box2"),
            "width":600,
            "height":200,
            "imgs":["img/timg4.jpg","img/timg5.jpg","img/timg2.jpg","img/timg1.jpg"],
            "timespace":4000,
            "btnWidth":10,
            "btnHeight":10,
            "btnColor":"pink",
            "btnHighColor":"yellow"
        }
    );
}
</script>
js代码:sliderShowPlugin.js
//1、定义类
function SlideShow(obj) {
    //1)、属性
    this.boxDom = obj.boxDom;
    this.width = obj.width;
    this.height = obj.height;
    //要播放的图片数组
    this.imgs = obj.imgs;
    this.ord = 0;//代表当前图片的序号,从0开始。
    this.myTimer = null;

    this.timespace = obj.timespace;

    //轮播图中的按钮
    this.btnWidth = obj.btnWidth;
    this.btnHeight = obj.btnHeight;
    this.btnColor = obj.btnColor;//原始颜色
    this.btnHighColor = obj.btnHighColor;//高亮颜色

    this.initUI();
    this.initEvent();
    this.autoChange();
}


    //2)、方法(函数)
SlideShow.prototype.initUI = function(){
        //一、创建所有的HTML元素,并设置css样式
        //1、创建img标记
        for(let i=0;i<this.imgs.length;i++){
            //1)、创建img对象
            let imgDom = document.createElement("img");
            imgDom.src = this.imgs[i];
            //2)、设置样式
            imgDom.style.cssText = "position:absolute;width:"+this.width+"px;height:"+this.height+"px;";
            //3)、添加到容器里
            this.boxDom.appendChild(imgDom);
        }

        //2、创建ul
        let ulDom = document.createElement("ul");
        ulDom.style.cssText = "position:absolute;right:20px;bottom:10px;height:40px;";
        //3、创建li
        for(let i=0;i<this.imgs.length;i++){
            let liDom = document.createElement("li");
            liDom.style.cssText = "float:left;margin-left:10px;border-radius:50%;";
            liDom.style.width=this.btnWidth+"px";
            liDom.style.height=this.btnHeight+"px";
            liDom.style.backgroundColor=this.btnColor;
            ulDom.appendChild(liDom);
        }
        //4、把ul添加到容器里
        this.boxDom.appendChild(ulDom);

        //二、初始化界面
        //1、把每张图片的透明度进行初始化
        let imgDoms = this.boxDom.children;
        imgDoms[0].style.opacity = 1;
        for(let i=1;i<imgDoms.length-1;i++){
            imgDoms[i].style.opacity = 0;
        }

        //第一按钮变成高亮
        let lis = this.boxDom.lastElementChild.children;
        lis[0].style.backgroundColor=this.btnHighColor;
    };

    //初始事件
SlideShow.prototype.initEvent = function(){
        let obj = this;//把当前this保存到obj里。

        //鼠标进入盒子的区域,停止变换
        this.boxDom.onmouseover =function(){
            window.clearInterval(obj.myTimer);
        };

        this.boxDom.onmouseout = function(){
            obj.autoChange();
        }
        let lis = this.boxDom.lastElementChild.children;
        for(let i=0;i<lis.length;i++){
            //赋值语句。
            lis[i].onclick = function(){//此函数的执行必须点击li。
                obj.goImg(i);//
            }
        }
    }

    //1、自动变换图片
SlideShow.prototype.autoChange=function(){
        this.myTimer=setInterval(()=>{
            //处理两个数据:一个是要淡出的图片序号,一个是要淡入的图片序号。
            let outord = this.ord;//ord++之前的ord就是要出去的ord
        //1、改变序号
        this.ord++;//4
        //2、处理边界
        if(this.ord>this.imgs.length-1){
            this.ord=0;
        }
        //3、改变外观;
        this.changeUI(outord,this.ord);
    },this.timespace);
    };


    //功能:给定出的序号和进的序号,完成两张图片的淡入淡出效果
SlideShow.prototype.changeUI=function(outord,inord){
        let currOpacity = 1;
        let incOpacity = -0.1;

        let imgs = this.boxDom.children; //document.getElementsByTagName("img");

        let myTimer = setInterval(function(){
            //1、改变数据
            currOpacity=currOpacity+incOpacity;//0.1
            //2、数据合法性的判断(边界)
            if(currOpacity<=0){  //
                window.clearInterval(myTimer);
            }
            //3、改变外观
            imgs[outord].style.opacity = currOpacity;
            imgs[inord].style.opacity = 1-currOpacity;
        },200);

        //2)、改变豆豆的背景颜色。
        let lis = this.boxDom.lastElementChild.children;
        //把所有的按钮变成橙色(初始颜色)
        for(let i=0;i<lis.length;i++){
            lis[i].style.backgroundColor = this.btnColor;
        }
        //把当前的变成红色
        lis[inord].style.backgroundColor=this.btnHighColor;
    };



    //3、跳转到指定的图片上
SlideShow.prototype.goImg=function(transOrd){//0
        outord = this.ord;//ord改变之前的ord就是要出去的ord
        //1、改变序号(把当前图片序号ord的值改为跳转的图片序号;)
        this.ord = transOrd;
        //2、改变外观
        this.changeUI(outord,this.ord);
    };

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值