JS实现图片轮播跑马灯

下面是详细的攻略:

实现图片轮播跑马灯的思路

要实现图片轮播跑马灯,需要考虑以下几个方面:

  1. 轮播的图片需要在一定的时间内依次切换显示。
  2. 轮播所需的图片宽度需要和外层容器宽度一致,超出宽度的图片需要隐藏。
  3. 需要添加左右箭头,实现手动切换图片的功能。
  4. 需要在鼠标移入轮播图时停止自动轮播,在鼠标移出时恢复轮播。

实现图片轮播跑马灯的步骤

一、HTML结构

首先,我们需要定义好轮播图的HTML结构,例如下面是一个简单的例子:

<div class="carousel">
  <div class="carousel-inner">
    <img src="image1.jpg" alt="">
    <img src="image2.jpg" alt="">
    <img src="image3.jpg" alt="">
  </div>
  <div class="prev-btn">&lt;</div>
  <div class="next-btn">&gt;</div>
</div>

其中,外层的carousel是轮播图的容器,carousel-inner则是轮播图的内容区域。每个img标签代表一张轮播图。最后的prev-btnnext-btn分别是左右箭头。

二、CSS样式

接下来,我们需要在CSS中定义好轮播图的样式,如下所示:

.carousel {
  width: 100%;
  position: relative;
  overflow: hidden;
}
.carousel-inner {
  width: 300%;
  position: relative;
  transition: left 0.6s ease-in-out;
}
.carousel-inner img {
  width: 33.333%;
  float: left;
  display: block;
}
.prev-btn, .next-btn {
  position: absolute;
  top: 50%;
  width: 30px;
  height: 30px;
  margin-top: -15px;
  font-size: 20px;
  color: #fff;
  text-align: center;
  background: rgba(0, 0, 0, 0.5);
  cursor: pointer;
}
.prev-btn {
  left: 0;
}
.next-btn {
  right: 0;
}

其中,轮播图容器需要设置widthposition属性。为了实现轮播效果,需要给轮播内容区域设置width属性为300%。因为轮播图会自动滑动,所以需要将轮播内容区域的left属性设置为负数的宽度,再和动画时间一同设置给transition属性,以实现轮播的效果。此外,每张轮播图片需要设置宽度为33.333%,并且设置float属性为left,使它们水平排列。最后,左右箭头需要设置位置和颜色等样式。

三、JS实现

最后,我们需要使用JavaScript来实现轮播图的自动滑动和手动切换功能等。

1. 自动滑动功能

实现自动滑动的功能,可以使用setInterval函数来定时修改轮播内容区域的left属性值,让轮播图自动向左滑动。代码如下:

var carouselInterval = setInterval(function () {
  var left = parseInt($('.carousel-inner').css('left')) || 0;
  left -= $('.carousel-inner img').eq(0).width();
  if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
    left = 0;
  }
  $('.carousel-inner').css('left', left);
}, 3000);

在上面的代码中,首先使用setInterval函数每3秒钟执行一次回调函数。回调函数里通过$('.carousel-inner').css('left')获取到当前内容区域的left属性值,并将其转换为整型后减去当前图片的宽度。如果到达最后一张图片,将left属性值设置为0,重新开始轮播。最后,通过$('.carousel-inner').css('left', left)将修改后的left属性值应用于轮播图的内容区域。

2. 手动切换功能

而手动切换图片可以通过给左右箭头添加事件监听,分别执行向上翻页和向下翻页的操作来实现。代码如下:

$('.prev-btn').click(function () {
  var left = parseInt($('.carousel-inner').css('left')) || 0;
  left += $('.carousel-inner img').eq(0).width();
  if (left > 0) {
    left = -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width();
  }
  $('.carousel-inner').css('left', left);
});

$('.next-btn').click(function () {
  var left = parseInt($('.carousel-inner').css('left')) || 0;
  left -= $('.carousel-inner img').eq(0).width();
  if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
    left = 0;
  }
  $('.carousel-inner').css('left', left);
});

在上面的代码中,左右箭头分别绑定click事件回调函数。回调函数里通过$('.carousel-inner').css('left')获取到当前内容区域的left属性值,并根据点击的箭头执行对应的加减操作。最后再将修改后的left属性值应用到轮播图的内容区域即可。

3. 鼠标滑过/离开事件

和很多轮播图一样,我们需要在鼠标移入时停止自动轮播,在鼠标移出时恢复轮播,可以通过给轮播图容器添加mouseentermouseleave两个事件来实现。代码如下:

$('.carousel').on('mouseenter', function () {
  clearInterval(carouselInterval);
}).on('mouseleave', function () {
  carouselInterval = setInterval(function () {
    var left = parseInt($('.carousel-inner').css('left')) || 0;
    left -= $('.carousel-inner img').eq(0).width();
    if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
      left = 0;
    }
    $('.carousel-inner').css('left', left);
  }, 3000);
});

在上面的代码中,当鼠标移入轮播图容器时,使用clearInterval函数清除自动轮播计时器即可。当鼠标移出时,重新开始自动轮播计时器即可,在此处需要将回调函数赋值给变量carouselInterval。这样,就完成了图片轮播跑马灯的实现。

四、完整代码示例

下面是一个完整的代码示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图片轮播跑马灯</title>
    <style>
        .carousel {
            width: 100%;
            position: relative;
            overflow: hidden;
        }

        .carousel-inner {
            width: 300%;
            position: relative;
            transition: left 0.6s ease-in-out;
        }

        .carousel-inner img {
            width: 33.333%;
            float: left;
            display: block;
        }

        .prev-btn,
        .next-btn {
            position: absolute;
            top: 50%;
            width: 30px;
            height: 30px;
            margin-top: -15px;
            font-size: 20px;
            color: #fff;
            text-align: center;
            background: rgba(0, 0, 0, 0.5);
            cursor: pointer;
        }

        .prev-btn {
            left: 0;
        }

        .next-btn {
            right: 0;
        }
    </style>
</head>
<body>
    <div class="carousel">
        <div class="carousel-inner">
            <img src="image1.jpg" alt="">
            <img src="image2.jpg" alt="">
            <img src="image3.jpg" alt="">
        </div>
        <div class="prev-btn">&lt;</div>
        <div class="next-btn">&gt;</div>
    </div>
    <script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
    <script>
        var carouselInterval = setInterval(function () {
            var left = parseInt($('.carousel-inner').css('left')) || 0;
            left -= $('.carousel-inner img').eq(0).width();
            if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
                left = 0;
            }
            $('.carousel-inner').css('left', left);
        }, 3000);

        $('.prev-btn').click(function () {
            var left = parseInt($('.carousel-inner').css('left')) || 0;
            left += $('.carousel-inner img').eq(0).width();
            if (left > 0) {
                left = -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width();
            }
            $('.carousel-inner').css('left', left);
        });

        $('.next-btn').click(function () {
            var left = parseInt($('.carousel-inner').css('left')) || 0;
            left -= $('.carousel-inner img').eq(0).width();
            if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
                left = 0;
            }
            $('.carousel-inner').css('left', left);
        });

        $('.carousel').on('mouseenter', function () {
            clearInterval(carouselInterval);
        }).on('mouseleave', function () {
            carouselInterval = setInterval(function () {
                var left = parseInt($('.carousel-inner').css('left')) || 0;
                left -= $('.carousel-inner img').eq(0).width();
                if (left < -($('.carousel-inner img').length - 3) * $('.carousel-inner img').eq(0).width()) {
                    left = 0;
                }
                $('.carousel-inner').css('left', left);
            }, 3000);
        });
    </script>
</body>
</html>

五、示例展示

下面是两个示例展示网址:

  1. 第一个实例:https://codepen.io/pengfei_chen/pen/YzVWRKL
  2. 第二个实例:https://codepen.io/pengfei_chen/pen/OJMmGJM

以上就是JS实现图片轮播跑马灯的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现图片轮播跑马灯 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 原生JavaScript实现AJAX、JSONP

    原生JavaScript实现AJAX AJAX是Asynchronous JavaScript and XML(异步JavaScript和XML)的简称,是一种通过在后台与服务器进行少量数据交换的方式,实现页面局部更新的技术。 基本原理 AJAX的原理是利用JavaScript向后台服务器发送HTTP请求并接收后台服务器返回的数据,在不刷新页面的情况下对页面…

    JavaScript 2023年5月27日
    00
  • 用函数式编程技术编写优美的 JavaScript_ibm

    用函数式编程技术编写优美的 JavaScript – 完整攻略 函数式编程是一种将计算机程序视为数学函数的编程范式。在这种编程方式下,函数被视为是数据流变换的原子操作,程序的执行就是一个函数接受输入并返回输出的过程。由于函数式编程减少了状态变量的使用,可以使得代码更加简洁、易读、易维护。 在 JavaScript 中,函数式编程几乎可以应用于所有方面。本文将…

    JavaScript 2023年5月19日
    00
  • JS中对象与字符串的互相转换详解

    下面是关于JS中对象与字符串的互相转换详解: 对象转字符串 在JS中,对象转成字符串通常使用JSON.stringify()函数,该函数将JavaScript对象转换为字符串,序列化过程中字符串中的对象、数组等会自动转成字符串。 以下是转换过程及示例代码: 基础用法 let obj = {name: ‘Mike’, age: 20, hobby: [‘rea…

    JavaScript 2023年5月27日
    00
  • JS获取html元素的标记名实现方法

    获取 HTML 元素标记名是 JavaScript 中常用的操作,以下是实现方法的详细攻略: 1. 使用 tagName 属性获取标记名 可以使用 tagName 属性来获取 HTML 元素的标记名。该属性只能用于 DOM 对象,对于文本节点和注释节点是无效的。 示例代码如下: // 获取某个元素的标记名 const element = document.g…

    JavaScript 2023年6月10日
    00
  • js实现特别简单的钟表效果

    当开发一个网站时,增加一个钟表效果可以有效地增加用户的交互性和娱乐性。在JavaScript中实现一个钟表的效果十分简单。我们可以通过JavaScript调用内置的Date对象来获取当前时间,并通过一些数学计算将其转化为时针、分针和秒针的指针位置。以下是实现这个效果的步骤: 1. HTML结构 首先,我们需要在页面中添加一个标记,我使用div来存放我的时钟。…

    JavaScript 2023年5月27日
    00
  • 超全面的JavaScript开发规范(推荐)

    超全面的JavaScript开发规范 JavaScript规范是多数开发者应遵守的一些指导原则,可以提高代码的可读性、可维护性和可扩展性。在本文中,将介绍一个超全面的JavaScript开发规范,以及如何使用它来提高你的代码质量。 1. 命名规范 1.1 变量命名规范 变量名应该具有描述性,能够清楚地反映变量所代表的内容。变量名应采取小写字母,单词之间使用下…

    JavaScript 2023年5月17日
    00
  • 才发现的超链接js导致网页中GIF动画停止的解决方法

    完整攻略如下: 问题背景 当我们在网页中添加一些超链接时,有时会发现网页中的GIF动画会停止播放,这是因为一些不合适的js代码导致了GIF动画的暂停。本攻略将详细介绍这个问题的解决方法。 发现问题 首先,我们需要确定是否存在这个问题。当我们添加了一个超链接,然后在网页中出现了GIF动画,观察动画是否会在超链接出现时暂停。如果动画暂停,那么就有可能是因为超链接…

    JavaScript 2023年6月10日
    00
  • VuePress使用Algolia实现全文搜索

    下面我将为你详细讲解“VuePress使用Algolia实现全文搜索”的完整攻略。 什么是VuePress? VuePress是一款基于Vue.js的静态网站生成器,它基于Markdown文件进行内容编写,具有文档编写、主题定制、SEO优化、全文搜索等功能,为个人博客或技术文档提供了一种快速搭建的方案。 什么是Algolia? Algolia是一款强大的全文…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部