js实现图片无缝滚动特效

yizhihongxing

下面是“js实现图片无缝滚动特效”的完整攻略:

简介

无缝滚动特效是网页设计中常用的效果之一,可以使页面更加生动和丰富。JS实现图片无缝滚动特效需要以下几个步骤:

  1. HTML布局;
  2. CSS样式;
  3. JS编写。

HTML布局

在HTML中,需要先设置好图片的容器和展示区域。

<div class="scroll-container">
  <div class="scroll-content">
    <ul>
      <li><img src="img1.jpg" alt=""></li>
      <li><img src="img2.jpg" alt=""></li>
      <li><img src="img3.jpg" alt=""></li>
      <li><img src="img4.jpg" alt=""></li>
      <li><img src="img5.jpg" alt=""></li>
      <!-- 图片数量可以根据需求进行更改 -->
    </ul>
  </div>
</div>

CSS样式

为了实现无缝滚动,需要设置一些CSS样式,其中主要包括以下几点:

  1. 设置容器的宽度和高度;
  2. 设置容器的 overflow 为 hidden,使得图片溢出部分被隐藏;
  3. 对 ul 设置宽度为图片张数乘以单张图片宽度,使得 ul 的宽度能够容纳所有图片;
  4. 对 ul 以及其 li 设置 display 为 inline-block,使得 ul 中的 li 并排显示;
  5. 对 ul 以及其 li 设置 padding 为 0 和 margin 为 0,取消默认样式;
  6. 对 li 中的 img 设置宽度和高度等于单张图片的宽高;
  7. 对 li 中的 img 设置 float 为 left,使得图片水平排列。

下面是样式代码:

.scroll-container {
  width: 100%;
  height: 300px;
  overflow: hidden;
}

.scroll-content {
  width: 5000px;
}

.scroll-content ul {
  width: 2500px;
  display: flex;
  margin: 0;
  padding: 0;
}

.scroll-content ul li {
  display: inline-block;
  padding: 0;
  margin: 0;
}

.scroll-content ul li img {
  width: 500px;
  height: 300px;
  float: left;
}

JS编写

实现无缝滚动效果需要用到 JS 中的 setInterval 方法和 clearInterval 方法。步骤如下:

  1. 获取图片容器(ul)元素本身以及其中所有 li 元素;
  2. 利用 setInterval 方法每隔一定时间调用一次滚动函数;
  3. 滚动函数实现以下逻辑:
  4. 判断当前是否滚动到最后一张图片,如果是则立即将 ul 的 left 设为 0,重新开始一轮滚动;
  5. 否则在当前基础上继续滑动,直到下一张图片的位置;
  6. 利用 clearInterval 方法停止滚动。

下面是代码示例:

var timer = null;
var scrollElem = document.querySelector(".scroll-content ul");
var scrollImg = document.querySelectorAll(".scroll-content ul li");

function start() {
  slideTimer = setInterval(function () {
    intervalSlide();
  }, 2000);
}

function intervalSlide() {
  var bannerWidth = parseInt(getComputedStyle(scrollElem).width);

  if (scrollElem.offsetLeft <= -(scrollImg.length - 1) * bannerWidth) {
    scrollElem.style.left = "0px";
  } else {
    var newLeft = scrollElem.offsetLeft - bannerWidth;
    scrollElem.style.left = newLeft + "px";
  }
}

function stop() {
  clearInterval(slideTimer);
}

start();

示例

下面是两个完整的示例,可以参考:

示例一

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>JS实现无缝滚动特效</title>
  <style>
    .scroll-container {
      overflow: hidden;
      position: relative;
      width: 100%;
      height: 400px;
    }
    .scroll-content ul {
      list-style: none;
      position: absolute;
      left: 0;
      top: 0;
    }
    .scroll-content ul li {
      float: left;
      width: 1000px;
    }
    .scroll-content ul li img {
      width: 100%;
    }
  </style>
</head>
<body>
  <div class="scroll-container">
    <div class="scroll-content">
      <ul>
        <li><img src="./images/1.jpg" alt=""></li>
        <li><img src="./images/2.jpg" alt=""></li>
        <li><img src="./images/3.jpg" alt=""></li>
        <li><img src="./images/4.jpg" alt=""></li>
        <li><img src="./images/5.jpg" alt=""></li>
      </ul>
    </div>
  </div>
  <script>
    var timer = null;
    var scrollElem = document.querySelector(".scroll-content ul");
    var scrollImg = document.querySelectorAll(".scroll-content ul li");

    function start() {
      slideTimer = setInterval(function () {
        intervalSlide();
      }, 2000);
    }

    function intervalSlide() {
      var bannerWidth = parseInt(getComputedStyle(scrollElem).width);

      if (scrollElem.offsetLeft <= -(scrollImg.length - 1) * bannerWidth) {
        scrollElem.style.left = "0px";
      } else {
        var newLeft = scrollElem.offsetLeft - bannerWidth;
        scrollElem.style.left = newLeft + "px";
      }
    }

    function stop() {
      clearInterval(slideTimer);
    }

    start();
  </script>
</body>
</html>

示例二

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>JS实现无缝滚动特效</title>
  <style>
    .scroll-container {
      width: 100%;
      height: 400px;
      overflow: hidden;
    }
    .scroll-content {
      width: 5000px;
    }
    .scroll-content ul {
      width: 2500px;
      display: flex;
      margin: 0;
      padding: 0;
    }
    .scroll-content ul li {
      display: inline-block;
      padding: 0;
      margin: 0;
    }
    .scroll-content ul li img {
      width: 1000px;
      height: 400px;
      float: left;
    }
  </style>
</head>
<body>
  <div class="scroll-container">
    <div class="scroll-content">
      <ul>
        <li><img src="./images/1.jpg" alt=""></li>
        <li><img src="./images/2.jpg" alt=""></li>
        <li><img src="./images/3.jpg" alt=""></li>
        <li><img src="./images/4.jpg" alt=""></li>
        <li><img src="./images/5.jpg" alt=""></li>
      </ul>
    </div>
  </div>
  <script>
    var timer = null;
    var scrollElem = document.querySelector(".scroll-content ul");
    var scrollImg = document.querySelectorAll(".scroll-content ul li");

    function start() {
      slideTimer = setInterval(function () {
        intervalSlide();
      }, 2000);
    }

    function intervalSlide() {
      var bannerWidth = parseInt(getComputedStyle(scrollElem).width);

      if (scrollElem.offsetLeft <= -(scrollImg.length - 1) * bannerWidth) {
        scrollElem.style.left = "0px";
      } else {
        var newLeft = scrollElem.offsetLeft - bannerWidth;
        scrollElem.style.left = newLeft + "px";
      }
    }

    function stop() {
      clearInterval(slideTimer);
    }

    start();
  </script>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现图片无缝滚动特效 - Python技术站

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

相关文章

  • 有关opacity或RGBA设置颜色值及元素的透明值

    关于设置颜色值及元素的透明值,有两种常见的方法:设置透明度(opacity)和使用RGBA颜色模式。 1. 设置透明度 使用opacity来设置元素的透明度,该属性通常与CSS选择器一起使用,如下所示: selector { opacity: 0.5; /* 50%透明度 */ } 这里的selector指的是对应元素的CSS选择器,数字0.5表示透明度的值…

    css 2023年6月9日
    00
  • vue实现鼠标经过显示悬浮框效果

    实现鼠标悬浮框效果的一种常用方式是使用Vue的v-show指令和CSS的:hover伪类。利用Vue的数据绑定,实现鼠标悬浮时显示悬浮框,鼠标移开时隐藏悬浮框的效果。以下是实现该效果的步骤: 步骤一:在Vue组件中加入需要显示的悬浮框和绑定悬浮框显示的数据属性。示例代码: <template> <div> <p @mouseov…

    css 2023年6月10日
    00
  • css中font的简写方法(包括粗细、大小、行高、字体)

    针对这个问题,我会从四个方面进行说明: 字体粗细 字体大小 行高 字体 字体粗细 在CSS中,我们通常使用font-weight属性来设置文本的粗细。但是,这并不是font属性的简写方式,因为它仅控制文本的粗细程度。 下面是两种设置粗细的方法: /* 方法一 */ font-weight: bold; /* 方法二 */ font: bold 16px/1.…

    css 2023年6月9日
    00
  • vue2.0使用swiper组件实现轮播的示例代码

    这里是关于如何使用 Vue2.0 和 Swiper 组件实现轮播的攻略: 1. 安装 Swiper 组件 首先,我们需要安装 Swiper 组件,可以通过 npm 包管理器进行安装。 npm install swiper –save 2. 引入 Swiper 组件 接着,在 Vue 单文件组件中引入 Swiper 组件: import Swiper fro…

    css 2023年6月9日
    00
  • IE下去掉iframe边框兼容IE7\IE8\IE6以下

    下面我将为您详细讲解如何在IE7、IE8、IE6以下的版本中去掉iframe边框。 1. 属性设置法 在IE中,iframe标签有一个frameBorder属性,默认值为“1”,即会显示边框。我们可以通过设置该属性为0来去掉边框。 <iframe src="example.com" frameborder="0"…

    css 2023年6月10日
    00
  • CSS3中新增的对文本和字体的设置

    当我们在使用CSS对网页进行样式设置时,文本和字体的设置通常是相当重要的部分。CSS3中新增了一些针对文本和字体的设置方法,可以让我们更加方便地对网页元素进行样式设置。下面是一份完整攻略,详细讲解了CSS3中文本和字体设置的方法,包含了两个示例说明。 1. CSS3中的文本设置 1.1 文本颜色设置 CSS3中可以通过color属性来设置文本的颜色。例如,以…

    css 2023年6月9日
    00
  • JS控制伪元素的方法汇总

    首先我们需要了解什么是伪元素。在CSS中,伪元素是一种可以添加到选择器的关键字,使用双冒号(::)来表示,它们表示元素的某个部分,比如元素的前面(::before)或者后面(::after)等等。 而控制伪元素需要用到JavaScript,具体方法如下: 1. 获取伪元素 let element = document.querySelector(‘.my-e…

    css 2023年6月9日
    00
  • 一篇文章带你学会css变量(推荐!)

    一篇文章带你学会CSS变量 本文将会介绍在CSS中使用变量的方法,包括变量定义、应用、子元素中使用变量以及JavaScript与CSS变量的交互。读完此文后,您将会完整地掌握CSS变量的使用。 1. 变量定义 在CSS中使用变量需要使用var关键字来定义一个变量,其格式如下: :root { –variable-name: value; } 这里使用了:r…

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