js原生轮播图插件制作

 更新时间:2021年10月04日 09:16:33   作者:墨者羽晨  
这篇文章主要为大家详细介绍了js原生轮播图插件制作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了js原生轮播图插件制作的具体代码,供大家参考,具体内容如下

调用时也只需要写一个DIV即可

调用的js部分配置内容:

传入轮播图需显示的位置(div)

传入图片和点击跳转的链接

话不多说,上代码

HTML

<div id="banner"></div>

HTML文档内的<script>,这里是轮播图的配置内容,一共两个参数,第一个是需要传入的DIV(轮播图所显示的区域),第二个参数是一个数组,数组里的元素是一个个对象,对象里第一个属性imgUrl表示图片,第二个属性link表示跳转链接

一个数组元素就是一张图片,不限数量,可自适应

<script>
        bannerArea(document.getElementById("banner"),[
            {imgUrl:"图片",
            link:"跳转链接"
        },
            {imgUrl:"图片",
            link:"跳转链接"
        },
            {imgUrl:"图片",
            link:"跳转链接"
        }
        ])
</script> 

JS插件内容

// 两个参数,第一个轮播图区域,第二个是配置
function bannerArea(areaDom, options) {
    var imgArea = document.createElement("div");
    var numberArea = document.createElement("div");
    var curIndex = 0;//第几张轮播图
    var changeTimer = null;
    var changeDuration = 1000;//间隔
    var timer = null;
    
    initImg();//创建一个区域来显示图片
    
    initNumber();//创建区域显示角标
    
    setStatus();//设置状态
    
    autoChange();//自动切换
 
    //下面是局部函数
 
    //创建图片,并且设置样式
    function initImg() {
        imgArea.style.width = "100%";
        imgArea.style.height = "100%";
        imgArea.style.display = "flex";
        imgArea.style.overflow = "hidden";
        for (let i = 0; i < options.length; i++) {
            var obj = options[i];
            var img = document.createElement("img");
            img.src = obj.imgUrl;
            img.style.width = "100%";
            img.style.height = "100%";
            img.style.margin = "0";
            img.addEventListener("click", function () {
                location.href = options[i].link;
            })
            imgArea.appendChild(img);
        }
        imgArea.addEventListener("mouseenter", function () {
            clearInterval(changeTimer);
            changeTimer = null;
        })
        imgArea.addEventListener("mouseleave", function () {
            autoChange();
        })
        areaDom.appendChild(imgArea);
    }
    //创建角标元素和设置样式
    function initNumber() {
        numberArea.style.textAlign = "center";
        numberArea.style.marginTop = "-25px";
        for (let i = 0; i < options.length; i++) {
            var sp = document.createElement("span");
            sp.style.width = "12px";
            sp.style.height = "12px";
            sp.style.background = "lightgray";
            sp.style.display = "inline-block";
            sp.style.margin = "0 7px";
            sp.style.borderRadius = "50%";
            sp.style.cursor = "pointer";
            sp.addEventListener("click", function () {
                curIndex = i;
                setStatus();
            })
            numberArea.appendChild(sp);
        }
        areaDom.appendChild(numberArea);
    }
 
    //设置角标区域状态
    function setStatus() {
        //设置圆圈的背景颜色
        for (var i = 0; i < options.length; i++) {
            if (i === curIndex) {
                //设置背景颜色为选择
                numberArea.children[i].style.background = "rgb(222 57 57)";
            } else {
                //非选择
                numberArea.children[i].style.background = "lightgray";;
            }
 
        }
        //显示图片
        var start = parseInt(imgArea.children[0].style.marginLeft);
        var end = curIndex * -100;
        var dis = end - start;
        var duration = 500;
        var speed = dis / duration;
        if (timer) {
            clearInterval(timer);
        }
        timer = setInterval(function () {
            start += speed * 20;
            imgArea.children[0].style.marginLeft = start + "%";
            if (Math.abs(end - start) < 1) {
                imgArea.children[0].style.marginLeft = end + "%";
                clearInterval(timer);
            }
        }, 20)
    }
    //自动切换
    function autoChange() {
        if (changeTimer) {
            return;
        }
        changeTimer = setInterval(function () {
            if (curIndex === options.length - 1) {
                curIndex = 0;
            } else {
                curIndex++;
            }
            setStatus();
        }, changeDuration)
    }
 
}

轮播图速度(切换时间)可在插件代码中    var changeDuration = 1000;//间隔   一句里调整

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JavaScript预解析,对象详解

    JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-11-11
  • JavaScript判断数组类型的方法

    JavaScript判断数组类型的方法

    这篇文章主要介绍了JavaScript判断数组类型的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • javascript表单验证和Window详解

    javascript表单验证和Window详解

    这篇文章主要详细介绍了javascript表单验证和Window,并附上了示例代码,非常使用,对于我们更好的了解表单验证和Window很有帮助,这里推荐给大家
    2014-12-12
  • bootstrap-table获取表格数据的多种方式

    bootstrap-table获取表格数据的多种方式

    这篇文章主要介绍了bootstrap-table获取表格数据的多种方式,bootstrap-table获取值得两种方式,一种是通过data获取,一种是通过url获取,需要的朋友可以参考下
    2023-10-10
  • javascript forEach通用循环遍历方法

    javascript forEach通用循环遍历方法

    循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和Jquery的结合版本吧.
    2010-10-10
  • JavaScript中for-in遍历方式示例介绍

    JavaScript中for-in遍历方式示例介绍

    for-in遍历方式的循环计数器是字符串类型,遍历对象时为对象属性/方法名,遍历数组时为数组元素下标索引,与普通的for循环不同,需要的朋友可以参考下
    2014-02-02
  • Bootstrap整体框架之JavaScript插件架构

    Bootstrap整体框架之JavaScript插件架构

    这篇文章主要介绍了Bootstrap整体框架之JavaScript插件架构的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript数组常用操作技巧汇总

    JavaScript数组常用操作技巧汇总

    这篇文章主要介绍了JavaScript数组常用操作技巧,以实例形式汇总了针对数组的查找、连接、排序及迭代等各种常见操作技巧,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • javascript将url解析为json格式的两种方法

    javascript将url解析为json格式的两种方法

    本篇文章主要介绍了javascript将url解析为json格式的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 如何使用JS获取IE上传文件路径(IE7,8)

    如何使用JS获取IE上传文件路径(IE7,8)

    本篇文章是对使用JS获取IE上传文件路径的实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-07-07

最新评论