js实现左右切换轮播图效果

这篇具有很好参考价值的文章主要介绍了js实现左右切换轮播图效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果:

自动向右循环播放

鼠标悬停,移出继续播放

点击向右按钮,跳到下一张

点击向左按钮,跳到上一张

保证图片的过渡效果完整呈现后,才能跳到下一张
底部圆点随图片位置切换激活状态

js轮播图代码左右切换,Javascript实现网站常见动画,javascript,css,前端

实现思路:

把第一张图片复制到最后一张

当播放到最后一张时,无缝切换到第一张,然后继续放第二张

js轮播图代码左右切换,Javascript实现网站常见动画,javascript,css,前端

注意点↓!

代码执行过快时,可以用异步任务,保证代码执行的先后顺序

setTimeout(function(){
    // 跳到第二张
    img_location += 1;
    olist.style.transition = "left 0.5s ease 0s";
    olist.style.left = -650*img_location+"px";
},0) // 时间可以设置为0

需要页面自动执行时,可以定义函数,模拟点击行为,不用重写一遍

 // 定义一个全局函数,自动跳到下一张,方便鼠标移入移出时调用
function move(){
    timer =  setInterval(function(){
    // 每隔1s点击向右按钮 
    rightbtn.click();
    },1000)
}

实现代码文章来源地址https://www.toymoban.com/news/detail-809547.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>跑马灯轮播图</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .carousel {
            width: 650px;
            margin: 50px auto;
            position: relative;
            overflow: hidden;
            /* 超出部分隐藏 */
        }
        /* 标题-轮播图 */
        h1 {
            text-align: center;
        }
        .carousel ul {
            list-style: none;
            /* 消除ul自带圆点 */
        }
        .carousel #list {
            width: 6000px;
            position: relative;
            left: 0px;
            /* 初始位置 */
            transition: left 0.5s ease 0s;
            /*图片跳转的过渡效果*/
        }
        .carousel #list img {
            width: 650px;
        }
        .carousel #list li {
            float: left;
            /* li排成一排显示 */
        }
        /* 上一张/下一张控制按钮 */
        .carousel>a {
            position: absolute;
            width: 30px;
            height: 50px;
            /* 垂直居中,距顶部一半的父元素盒子宽度,再向上移动自身的一半 */
            top: 50%;
            margin-top: -25px;
            background-color: rgba(163, 166, 167, 0.5);
        }
        .carousel>a>img {
            margin-left: -8px;
        }
        .carousel .leftbtn {
            left: 20px;
        }
        .carousel .rightbtn {
            right: 20px;
        }
        /* 底部定位圆点list */
        .carousel #location_list {
            width: 120px;
            position: absolute;
            top: 350px;
            left: 270px;
        }
        .carousel #location_list li {
            float: left;
            width: 10px;
            height: 10px;
            border-radius: 50%;
            margin: 5px;
            border: 1px solid white;
        }
        /* 圆点被激活时的样式,动态为圆点增加class */
        .carousel #location_list li.active {
            background-color: bisque;
        }
    </style>
</head>

<body>
    <h1>轮播图</h1>
    <div class="carousel">
        <!--图片列表  -->
        <ul id="list">
            <li><img src="images/number/1.jpg" alt="" /></li>
            <li><img src="images/number/2.jpg" alt="" /></li>
            <li><img src="images/number/3.jpg" alt="" /></li>
            <li><img src="images/number/4.jpg" alt="" /></li>
            <li><img src="images/number/5.jpg" alt="" /></li>
        </ul>
        <!-- 左右按钮 -->
        <a href="javascript:;" class="leftbtn"><img src="./images/lunbo/chevron-left.png" alt="" srcset=""></a>
        <a href="javascript:;" class="rightbtn"><img src="./images/lunbo/chevron-right.png" alt="" srcset=""></a>
        <!-- 圆点列表 -->
        <ul id="location_list">
            <!-- 默认激活第一个 -->
            <li class="active"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <script>
        var carousel = document.querySelector(".carousel");
        // 获取图片列表ul
        var olist = document.getElementById("list");
        // 获取定位数组
        var location_list = document.querySelectorAll('#location_list>li');

        // 向左按钮
        var leftbtn = document.querySelector('.leftbtn');
        // 向右按钮
        var rightbtn = document.querySelector('.rightbtn');

        // 将第一张图片加到最后一张,方便循环
        var oli = document.querySelector("#list li:first-child")
        olist.innerHTML += oli.innerHTML;

        // 当前显示的图片定位
        var img_location = 0;
        // 当前的圆点定位
        var dot_location = 0
        // 定义一个全局定时器变量
        var timer = null;
        // 默认不上锁,该状态为了保证过渡效果能完整呈现
        var islock = false;

        // 定义一个全局函数,自动跳到下一张,方便鼠标移入移出时调用
        function move() {
            timer = setInterval(function () {
                // 每隔1s点击向右按钮 
                rightbtn.click();
            }, 1000)
        }
        // 页面加载后自动调用,实现自动跳转下一张
        move();

        // 鼠标移入,清除定时器
        carousel.onmouseenter = function () {
            clearInterval(timer);
        }
        // 鼠标移出,调用自动播放
        carousel.onmouseleave = function () {
            move();
        }


        // 点击按钮切换下一张
        rightbtn.onclick = function () {
            if (islock) { return; }
            islock = true;
            if (img_location === 5) {
                // 清除过渡效果,从最后一张无缝衔接到开头
                olist.style.transition = "none";
                olist.style.left = "0px";
                img_location = 0;
            }
            // 由于代码执行过快,所以需要放到异步执行语句里
            setTimeout(function () {
                // 跳到第二张
                img_location += 1;
                dot_location += 1;
                olist.style.left = -650 * img_location + "px";
                olist.style.transition = "left 0.5s ease 0s";
                // 如果跳转后是第6张图片,实际上就是第一张图,圆点应该定位在第1个
                if (img_location === 5) {
                    dot_location = 0;
                    location_list[dot_location].className = "active";
                    location_list[4].className = "none";
                } else {
                    // 激活当前定位的圆点
                    location_list[dot_location].className = "active";
                    // 上一个圆点取消激活状态
                    location_list[dot_location - 1].className = "none"
                }

            }, 0)
            setTimeout(function () {
                islock = false;
            }, 500)
        };

        // 点击按钮切换上一张
        leftbtn.onclick = function () {
            if (islock) { return; }
            islock = true;
            // 清除过渡效果,从第一张无缝衔接到最后一张
            if (img_location === 0) {
                img_location = 5;
                olist.style.transition = "none";
                olist.style.left = -650 * img_location + "px";
            }
            // 由于代码执行过快,所以需要放到异步执行语句里
            setTimeout(function () {
                // 跳到上一张图
                img_location -= 1;
                dot_location -= 1;
                olist.style.transition = "left 0.5s ease 0s";
                olist.style.left = -650 * img_location + "px";
                // 如果跳完后是第五张图,圆点位置也要相应变成最后一个
                if (img_location === 4) {
                    dot_location = 4;
                    location_list[dot_location].className = "active";
                    location_list[0].className = "none";
                } else {
                    location_list[dot_location].className = "active";
                    location_list[dot_location + 1].className = "none"
                }
            }, 0)
            setTimeout(function () {
                islock = false;
            }, 500)
        }
    </script>
</body>

</html>

到了这里,关于js实现左右切换轮播图效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Jetpack Compose实现轮播图效果

    在最近思索如何使用Compose方式改进我的开源TMDB电影列表应用程序的主屏幕时,一个激动人心的概念浮现在我的脑海中——为什么不整合一个吸引人的轮播图来展示即将上映的电影呢?在本文中,我将分享我的开发和实现自定义轮播图的经历,提供涉及不同步骤的见解。 首先

    2024年02月08日
    浏览(105)
  • 【Android】使用ViewPager2实现轮播图效果,手动/自动轮播图

    这里使用Gilde进行加载图片:Glide 使用Gilde可以加载网络图片还可以提高图片加载性能。 接下来新建一个子布局item_image,加载viewPage2的子布局。 ViewPage2就是使用recyclerView实现的,所以这里使用方法其实类似。 这里直接继承RecyclerView.Adapter即可,代码很简单不必多说。 创建一个

    2024年02月03日
    浏览(49)
  • uni-app小程序折叠3D轮播图效果实现。

    先来看效果图 实现原理: 通过小程序的触摸事件,来控制图片数组的变化实现动态样式;来改变图片的样式。 贴上轮播组件完整代码 组件使用 如果有自动轮播的需求,可以改造下组件加个定时器处理数组就OK了。

    2024年02月11日
    浏览(44)
  • web前端【3】JS基础-轮播图【JavaScript、定时器、鼠标动作、自动轮播、增加和减少li列表】

    一、实验题目: 轮播图 二、实验内容简介 1.整体布局:图片、左右按钮、数字列表、添加删除按钮 2、左右箭头滚动 3、小圆点滚动 4、自动轮播 5、鼠标动作:指向和离开 6、添加与删除 三、实验过程 1. 需求分析 整体布局:设计一个轮播图,中间部分为自动轮播的图片展示

    2024年02月04日
    浏览(56)
  • 原生 JS 实现一个简单轮播图

    在动手实现轮播图之前,我们先来明确一下要实现的效果。 默认自动轮播,每隔4秒切换一张图片 鼠标点击任一个小圆点即可切换到对应的图片 鼠标移入轮播区域时,两侧出现切换图片的按钮,点击按钮分别切换到上(下)一张图片 因此,轮播图可以分为三个主要部分,首

    2024年02月09日
    浏览(62)
  • 用Element-UI框架写轮播图,左右箭头点击轮播,下方小锚点对应轮播

    不好意思视频上传不成功看链接https://www.douyin.com/video/7158792800564235527 注:借鉴官网:链接: https://element.eleme.cn/#/zh-CN/component/carousel这里有更多的我们需要的框架

    2023年04月08日
    浏览(48)
  • JS常用插件 Swiper插件 实现轮播图

    Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架 中文官网地址: https://www.swiper.com.cn/ 点击查看 Swiper演示 ,里面的功能和样式十分丰富,根据自己的需求选择 中文教程 中详细介绍了如何使用Swiper API文档 中介绍了各个模块以及参数的详细信息,遇到不明白的参数可以

    2024年02月01日
    浏览(65)
  • vue 实现钉钉官网的轮播图下面功能滚动排版CSS效果

    前言 最近在写PC端的业主端时候,发现传统的菜单栏比较丑,也不符合实际应用(功能页面并不多-展示为主) 偶然发现钉钉官网的效果挺有意思的,想着把这个效果复原过来,然后夸夸搜索了一番。 经过一顿的cv打法,加上修修补补把大概的效果整了出来,时间关系最基础

    2024年02月11日
    浏览(55)
  • JS实现轮播图的三种简单方法。

    实现思路 这可能是轮播图最简单点的实现之一,通过更改图片的src来实现该效果,首先需要将图片命名格式统一比如pic01.jpg,pic02.jpg…,再通过js使用定时器去改变img标签里面的src图片链接的名字来实现切换效果。代码如下: 实现效果 实现思路 这可能是轮播图最简单点的实现

    2024年02月03日
    浏览(48)
  • 使用vant+video.js实现轮播图图片和视频轮播播放

    先上效果图 1. 安装 2. 在需要用到的页面引入 3. 具体页面使用 假设传给子组件的数组结构 按照步骤来使用,其他地方视频播放情况都还好,至少安卓是好的,只是点击播放和暂停时候,ios需要点击多下才能触发点击事件; 然后以为是video.js插件可能没更新,ios版本迭代超过

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包