JS实现图片轮播跑马灯

yizhihongxing

下面是详细的攻略:

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

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

  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日

相关文章

  • 以JSON形式将JS中Array对象数组传至后台的方法

    将JavaScript中的Array对象数组以JSON格式传递至后台的基本步骤包括以下几点: 创建一个Array对象数组 使用JSON.stringify()将Array对象数组转换为JSON格式字符串 使用XMLHttpRequest对象将JSON格式字符串发送到后台 在后台解析JSON字符串并从中提取需要的数据 以下是一个简单的示例代码,演示如何将JS中…

    JavaScript 2023年5月27日
    00
  • 教你如何写出可维护的JS代码

    非常感谢您对“可维护的JS代码”的关注。以下是教你如何写出可维护的JS代码的完整攻略: 1. 命名规范 变量和函数命名要具有描述性:让人一眼就能明白变量或函数的用途,例如setBackgroundColor() 等。 使用清晰的命名风格:可以使用CamelCase或PascalCase风格,但是应该在整个项目中保持一致。 避免使用单个字符变量名称,因为这样会…

    JavaScript 2023年5月28日
    00
  • 前端面试JavaScript高频手写大全

    下面是我对“前端面试JavaScript高频手写大全”的完整攻略: 理解面试手写题的重要性 在前端面试中,手写题经常出现。这类题目不仅考察了我们的语法基础能力,更是考察了我们的逻辑思维能力。因此,提前准备面试手写题可以帮助我们快速掌握JavaScript的基础语法和常见面试题目,并能在面试中游刃有余地回答问题。 建立自己的笔记库 我们可以看到,大部分的手写题…

    JavaScript 2023年5月28日
    00
  • JavaScript字符串处理(String对象)详解

    JavaScript字符串处理(String对象)详解 在JavaScript中,字符串也是一个重要的数据类型。String对象中提供了一系列的方法来对字符串进行处理。本篇攻略将详细讲解JavaScript中String对象的常用方法。 字符串的定义 在JavaScript中,字符串可以用单引号或双引号来定义。例如: var str1 = ‘hello wo…

    JavaScript 2023年5月19日
    00
  • JS解析json数据并将json字符串转化为数组的实现方法

    我来为你提供一份完整的攻略。 1. JSON和数组的简介 在介绍解析JSON数据并将JSON字符串转换为数组的实现方法之前,我们先来简单了解一下JSON和数组。 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有简洁、易于读写的特点。JSON的数据格式是键值对的方式,键和值都使用双引号包裹,键值对之间使…

    JavaScript 2023年5月27日
    00
  • 在React中this容易遇到的问题详解

    在React中this容易遇到的问题详解 在React开发中,this这个关键字非常常用,但同时也很容易引起问题。接下来,本文将详细讲解在React中this容易遇到的问题,并提供相应的解决方法。 问题1:函数调用时this指向问题 在React中,我们一般使用bind绑定this来确保函数中的this指向正确。但是,有时我们会在组件渲染时动态传递数据,这时…

    JavaScript 2023年6月10日
    00
  • ES6_day01

    ### canvas特性 标签中的文本只有在浏览器下支持canvas标签时才显示 行内块元素 高度设置在标签属性上 ### 填充色设置 ctx.fillStyle=”#ff0000″ ### 线条颜色设置 ctx.strokeStyle=”ff0000″ ### 线条粗细 ctx.lineWidth=”” 线 moveTo(x,y) 开始位置 lineTo(…

    JavaScript 2023年4月18日
    00
  • asp.net 设置GridView的选中行

    当我们在使用ASP.NET开发Web应用程序时,经常会用到GridView控件来显示数据。在GridView中选中某一行并进行操作,是在Web开发中常见的需求。在这里,我将向您介绍一种完整的方法来实现在ASP.NET中设置GridView的选中行。该方法以C#语言为例进行示范。 1. 设置GridView的选中行 对于设置GridView的选中行,我们可以通…

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