返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS实现轮播图小案例
  • 292
分享到

JS实现轮播图小案例

2024-04-02 19:04:59 292人浏览 泡泡鱼
摘要

本文实例为大家分享了js实现轮播图小案例的具体代码,供大家参考,具体内容如下 分析: 点击左右箭头 滑动轮播图 鼠标不在轮播图内时 每隔2秒自动滑动轮播图

本文实例为大家分享了js实现轮播图小案例的具体代码,供大家参考,具体内容如下

分析:

  • 点击左右箭头 滑动轮播图
  • 鼠标不在轮播图内时 每隔2秒自动滑动轮播图
  • 鼠标移入时 停止自动滑动轮播图
  • 点击小圆圈 显示对应的轮播图

1、鼠标移入、移出显示或隐藏左右箭头:


// 获取左右箭头的元素
    let arrow_l = this.document.querySelector('.arrow-l');
    let arrow_r = this.document.querySelector('.arrow-r');
    // 获取到轮播图盒子元素
    let focus = this.document.querySelector('.focus');

    // 轮播图盒子添加鼠标移入移出事件 显示或隐藏 左右箭头
    focus.addEventListener('mouseenter', function(e) {
        arrow_l.style.display = 'block';
        arrow_r.style.display = 'block';
        // 鼠标移入的时候清除定时函数,不再自动滑动轮播图
        clearInterval(timer);
        timer = null;

    });

    focus.addEventListener('mouseleave', function(e) {
        arrow_l.style.display = 'none';
        arrow_r.style.display = 'none';
        // 鼠标移出  添加定时任务,每2秒来触发一次点击右箭头的点击
        timer = setInterval(function() {
            arrow_r.click();
        }, 2000);
    })

2、添加ol内的li标签:


// 获取到ul列表(轮播图列表)和ol列表 (小圆圈列表)元素
var ul = focus.querySelector('ul');
// 此时ol列表内没有元素
var ol = focus.querySelector('.circle');
// 循环轮播图列表 有多少张轮播图就添加多少个小圆圈
for (var i = 0; i < ul.children.length; i++) {
        // 创建li标签
        var li = this.document.createElement('li');
        // 给li标签添加自定义属性 为轮播图的下标 用于
        li.setAttribute('l-index', i);
        // ol标签添加li标签
        ol.appendChild(li);
        // 每一个li标签添加点击函数
        li.addEventListener('click', function() {
            // 清除所有小圆圈的样式
            for (var j = 0; j < ol.children.length; j++) {
                ol.children[j].className = '';
            }
            // 点击哪一个小圆圈  就添加样式
            this.className = 'current';

   // 点击小圆圈  更改num和circl 来更换轮播图
            num = this.getAttribute('l-index');
            circl = this.getAttribute('l-index');
            // 动画效果
            animate(ul, -num * focusWidth);
        })

    }

3、复制第一张轮播图到ul的最后,显得轮播图更自然,添加记录轮播图的下标和记录小圆圈的下标,添加节流阀:
流阀

添加一个节流阀 默认为true 如果点击之后立即改为false 如果没处理完上次点击的事件 这个时间内的点击事件不再处理
类似一个,当锁住的时候只做一件事,别的点击不会再做,等什么时候开了锁,什么时候才可以做。


// 克隆一个第一张轮播图的节点添加到ul内
// 播放到最后一个的时候  转到第一个看着有连贯性
    ol.children[0].className = 'current';
    let cloneLi = ul.children[0].clonenode(true);
    ul.appendChild(cloneLi);

    // 添加一个下标  来记录轮播图播放到了第几张
    num = 0;
    // 与num类似,记录小圆圈的下标
    circl = 0;
    // 添加节流阀
    flag = true;

4、右箭头、左箭头的点击事件和小圆圈更改样式:


// 点击右箭头的  点击事件
arrow_r.addEventListener('click', function(e) {
        // 添加一个节流阀 默认为True 如果点击之后立即改为false  如果没处理完上次点击的事件 这个时间内的点击事件不再处理
        if (flag) {
            // 改变节流阀的状态
            flag = false;

            // 如果num下标为最后一张 就恢复到第一张 把num下标改为默认0
            if (num == ul.children.length - 1) {
                ul.style.left = 0;
                num = 0;

            }
            // num下标加1
            num++;
            // 改变动画效果 滑动到  第几张轮播图 * 一张的宽度 的距离
            animate(ul, -num * focusWidth, function() {
                // 回调函数设置节流阀为true  可以再次点击
                flag = true;
            });

            // 小圆圈+1
            circl++;
            // 如果小圆圈到了最后一个  恢复为0
            if (circl == ul.children.length - 1) {
                circl = 0;
            }
            // 改变小圆圈的样式
            circlChange();
        }
    })

// 左箭头的点击事件
    arrow_l.addEventListener('click', function(e) {
        if (flag) {
            flag = false;
            // 判断为0时说明是从第一张开始往左点
            if (num == 0) {
                // 更改num下标为最后一个
                num = ul.children.length - 1;
                // 更改轮播图为最后一个
                ul.style.left = -num * focusWidth + 'px';
            }
            // num -1
            num--;
            // 动画效果
            animate(ul, -num * focusWidth, function() {
                flag = true;
            });
            // 如果小圆圈为0  说明到了第一个轮播图
            if (circl == 0) {
                // 小圆圈到最后一个
                circl = ul.children.length - 1;
            }
            // 小圆圈-1
            circl--;
            // 改变小圆圈的样式
            circlChange();
        }
    })

function circlChange() {
     // 遍历ol列表  删除每一个小圆圈的样式
        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        };
        // 给当前circl下标的小圆圈添加样式
        ol.children[circl].className = 'current';
    }

5、轮播图动画函数的封装:


function animate(obj, target, callback) {
    // console.log(callback);  callback = function() {}  调用的时候 callback()


    // 先清除以前的定时器,只保留当前的一个定时器执行
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        // 步长值写到定时器的里面
        // 把我们步长值改为整数 不要出现小数的问题
        // var step = Math.ceil((target - obj.offsetLeft) / 10);
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            // 停止动画 本质是停止定时器
            clearInterval(obj.timer);
            // 回调函数写到定时器结束里面
            // if (callback) {
            //     // 调用函数
            //     callback();
            // }
            callback && callback();
        }
        // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
        obj.style.left = obj.offsetLeft + step + 'px';

    }, 15);
}

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

--结束END--

本文标题: JS实现轮播图小案例

本文链接: https://lsjlt.com/news/157451.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS实现轮播图小案例
    本文实例为大家分享了JS实现轮播图小案例的具体代码,供大家参考,具体内容如下 分析: 点击左右箭头 滑动轮播图 鼠标不在轮播图内时 每隔2秒自动滑动轮播图 ...
    99+
    2024-04-02
  • JS实现轮播图案例
    本文实例为大家分享了JS实现轮播图案例的具体代码,供大家参考,具体内容如下 实现功能: 1、自动轮播:鼠标停留在轮播图上时不切换图片,鼠标离开后自动轮播。 2、点击左右按钮切换图片。...
    99+
    2024-04-02
  • JavaScript实现轮播图案例
    本文实例为大家分享了JavaScript实现轮播图效果的具体代码,供大家参考,具体内容如下 运用定时器所写成的一个简单的轮播图,直接看代码,如下: 1.css代码 <sty...
    99+
    2024-04-02
  • JS实现旋转木马轮播案例
    本文实例为大家分享了JS实现旋转木马轮播的具体代码,供大家参考,具体内容如下 效果: 每张图片排列的位置是以中间为对称的。图片大小,透明度不相同,但对称的图片的样式是相同的,呈现出一...
    99+
    2024-04-02
  • JS如何实现轮播图
    本篇内容介绍了“JS如何实现轮播图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现功能:自动轮播:鼠标停留在轮播图上时不切换图片,鼠标离开...
    99+
    2023-06-29
  • Swiper.js插件实现轮播图的案例
    小编给大家分享一下Swiper.js插件实现轮播图的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Swiper是纯javascript打造的滑动特效插件,面向...
    99+
    2023-06-14
  • 纯JS实现轮播图的示例分析
    这篇文章主要介绍了纯JS实现轮播图的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下代码:<!DOCTYPE ht...
    99+
    2024-04-02
  • 原生JS实现图片轮播 JS实现小广告插件
    最近想用原生JS多实现一些小功能,现在写到博客里,大家可以借鉴,有问题欢迎指出。 轮播图 需求: 图片循环轮播,可点击左右切换,切换状态与<li>绑定,鼠标移入图片悬停,...
    99+
    2024-04-02
  • 用js实现轮播图效果
    今天来说一下利用js实现轮播图效果,供大家参考,具体内容如下 思路 1.首先我们要把需要用到的元素获取过来 <div class="all" id='box'> ...
    99+
    2024-04-02
  • 纯js实现轮播图效果
    本文实例为大家分享了js实现轮播图效果的具体代码,供大家参考,具体内容如下 结合我们前面学过的:鼠标监听事件(移入移出、点击),创建节点,排他思想、定时器等,就可以实现一个能手动和自...
    99+
    2024-04-02
  • 用js实现简单轮播图
    本文实例为大家分享了js实现简单轮播图的具体代码,供大家参考,具体内容如下 1.实现功能: 2.实现思路: (1)鼠标放到图片上,显示箭头,用display来做。 (2)动态生成...
    99+
    2024-04-02
  • js实现3D轮播图效果
    本文实例为大家分享了js实现3D轮播图效果的具体代码,供大家参考,具体内容如下 主要有平移和旋转构成3d效果的轮播图,小白一只,不足之处还请大家多多指教,代码如下 css代码: ...
    99+
    2024-04-02
  • 小程序实现轮播图
    本文实例为大家分享了小程序实现轮播图的具体代码,供大家参考,具体内容如下 那个先上效果: step1:页面index.wxml代码 <!-- 轮播 --> <sw...
    99+
    2024-04-02
  • 原生JS实现层叠轮播图
    小编给大家分享一下原生JS实现层叠轮播图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!HTML:<!DOCTYPE&nbs...
    99+
    2024-04-02
  • JS怎么实现原生轮播图
    小编给大家分享一下JS怎么实现原生轮播图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!CSS部分:*{   ...
    99+
    2024-04-02
  • js实现轮播图制作方法
    本文实例为大家分享了js实现轮播图展示的具体代码,供大家参考,具体内容如下 效果如图所示 代码如下: <!DOCTYPE html> <html> &...
    99+
    2024-04-02
  • js实现简单轮播图效果
    本文实例为大家分享了js实现简单轮播图效果的具体代码,供大家参考,具体内容如下 使用transform = translateX()实现的图片切换 <style> ...
    99+
    2024-04-02
  • 原生JS实现呼吸轮播图
    今天给大家分享一个用原生JS实现的呼吸轮播图,效果如下: 以下是代码实现,欢迎大家复制粘贴。 <!DOCTYPE html> <html> <...
    99+
    2024-04-02
  • JS实现图片轮播跑马灯
    本文实例为大家分享了JS实现图片轮播跑马灯的具体代码,供大家参考,具体内容如下 实现原理: 1、准备一个展示区域的盒子,设置宽高;2、准备一个存放所有图片的盒子,将所有图片依次放入,...
    99+
    2024-04-02
  • js实现轮播图自动切换
    本文实例为大家分享了js实现轮播图自动切换的具体代码,供大家参考,具体内容如下 先看效果图 第一种  //点击按钮,序号变化 showIdx++; if (showIdx == i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作