html+css+javascript实现列表循环滚动示例代码

我来详细讲解“HTML+CSS+JavaScript实现列表循环滚动示例代码”的完整攻略。

  1. 准备HTML和CSS,先创建一个容器,设置宽高,并将其position设置为relative,然后在容器中创建一个ul列表,设置宽度为li的宽度乘以li的个数,然后将li的宽度和高度设置成容器的宽高,设置float: left 使其一行排列。此时,因为ul的宽度大于容器的宽度,所以在容器的外部设置一个包裹ul的div,将其overflow设置成hidden,使其只显示容器内的内容,而列表的部分将被隐藏起来。

  2. 追加两个li项,这两个li项分别为最后一个li项的样本克隆得到的副本和第一个li项的样本克隆得到的副本,并将它们分别放置在原来的li列表的前后。此操作实现的效果就是:展示出来的列表项再次循环,没有了断裂的现象,且接下来的JS代码可以实现这个列表项延时滑动的效果。

  3. 编写JavaScript代码,目标是实现无限循环滚动的效果。首先,获取列表容器(ul)和列表项宽度(liWidth),然后在轮播滚动过程中,只需每次将ul的left值向左移动liWidth的长度,再将该值赋给ul的left属性即可。但是当ul的left达到最后一个复制元素的位置时,就会存在空白,我们就需要进行一个判断来让该空白补齐,即判断ul的left是否小于等于-listWidth,若条件成立,则需要将left值重置为0以补齐空白。这样就可以实现列表项的循环滚动了。

下面是示例代码(代码中的“//”为代码的注释):

HTML部分:

<div id="box">
  <div id="wrap">
    <ul id="list">
      <li><img src="image0.jpg"></li>
      <li><img src="image1.jpg"></li>
      <li><img src="image2.jpg"></li>
      <li><img src="image3.jpg"></li>
      <li><img src="image4.jpg"></li>
      <!-- 克隆第一个和最后一个元素 -->
      <li><img src="image0.jpg"></li>
      <li><img src="image1.jpg"></li>
    </ul>
  </div>
</div>

CSS部分:

#box {
  width: 500px;
  height: 200px;
  position: relative;
  overflow: hidden;
}

#wrap {
  position: absolute;
  left: 0;
  top: 0;
}

#list {
  position: relative;
  margin: 0;
  padding: 0;
  list-style: none;
  width: 3000px; /* (liWidth * liNum) */
}


#list li {
  width: 500px;
  height: 200px;
  float: left;
}

JavaScript部分:

// 获取需要的元素
var box = document.getElementById('box');
var wrap = document.getElementById('wrap');
var list = document.getElementById('list');
var liWidth = list.getElementsByTagName('li')[0].offsetWidth; // 获取每一个 li 的宽度
var liNum = list.getElementsByTagName('li').length; // 获取 li 的个数
var pic = 0; // 初始化轮播的初始值
var flag = true; // 防止短时间内重复点击按钮

// 设置定时器,轮播滚动图片
function autoScroll() {
  var time = setInterval(function(){
    if (pic === liNum - 1) {
      pic = 1;
      list.style.left = 0;
    } else {
      pic++;
    }
    animate(list, -pic * liWidth);
  }, 3000);
}

// 动画效果
function animate(ele, target) {
  clearInterval(ele.timer);
  ele.timer = setInterval(function(){
    var step = (target - ele.offsetLeft) / 10;
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    if (ele.offsetLeft !== target) {
      ele.style.left = ele.offsetLeft + step + 'px';
    } else {
      clearInterval(ele.timer);
    }
  }, 15);
}

// 启动自动轮播
autoScroll();

示例说明:

(1)在HTML部分,我们使用了一个div来承载整个列表滚动的容器,为其设置了宽、高,并将其overflow设置成了hidden,以控制显示区域内的大小。子层级容器(#wrap)的宽度为容器宽度,而#list则为所有列表项的UL容器,利用它的宽度扩大了滚动范围。每个#list li则为单个li的宽度为容器宽度,其高度和宽度与容器相等,这样就可以展示完整的图片。

(2)在CSS部分,我们设置了每个li和UL容器的样式,其中UL的宽度为列表项宽度被列表项个数所乘,用于扩大滑动滚动的范围。

(3)在JavaScript部分,我们将需要操作的元素获取后使用animate函数不断循环更新列表的位置以达到滚动的效果。autoScroll函数实现自动滚动的效果,pic和flag两个变量则是为了避免用户频繁点击切换按钮而导致列表位置显示错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:html+css+javascript实现列表循环滚动示例代码 - Python技术站

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

相关文章

  • 详解基于Vue/React项目的移动端适配方案

    详解基于Vue/React项目的移动端适配方案 移动端适配问题一直困扰着前端开发人员,特别是在不同设备分辨率差异巨大的情况下。本攻略将详细介绍基于Vue/React项目的移动端适配方案,包括使用vw和rem两种方式进行适配。 什么是vw和rem vw和rem是移动端适配中比较常用的两种方式。vw是视窗单位,将屏幕宽度分成100份,1vw表示屏幕宽度的1%。r…

    css 2023年6月10日
    00
  • css 浮动(float)页面布局

    CSS 浮动(float)是一种常用的页面布局方式,它可以让元素脱离文档流并向左或向右浮动,从而实现多列布局、文字环绕图片等效果。下面是 CSS 浮动页面布局的完整攻略,包括基本概念、使用方法、注意事项和示例说明。 1. 基本概念 CSS 浮动(float)是一种元素定位方式,它可以让元素脱离文档流并向左或向右浮动。浮动元素会尽可能地靠近容器的左侧或右侧,并…

    css 2023年5月18日
    00
  • 详解CSS文件中的4种引入方式:行内,内联式,外部式,导入式

    当我们使用CSS样式为网页添加样式时,需要在HTML文档中引入CSS文件。CSS文件引入方式有四种,分别是行内、内联式、外部式和导入式。 行内引入方式 行内引入方式将CSS代码直接写在HTML标签元素内的style属性中,如下所示: <p style="color: red;">这是一段红色的文字</p> 这种方式…

    css 2023年6月10日
    00
  • jQuery实现百度图片移入移出内容提示框上下左右移动的效果

    要实现“jQuery实现百度图片移入移出内容提示框上下左右移动的效果”的功能,我们需要使用jQuery的动画效果,包括fadeIn/fadeOut和animate两种方法。 下面是具体的实现步骤: 建立HTML骨架结构:包含图片列表和内容提示框两个部分。 <div class="img-list"> <img src=&…

    css 2023年6月10日
    00
  • div中加入span右对齐后出现换行显示两种解决思路

    让我来详细讲解一下“div中加入span右对齐后出现换行显示两种解决思路”。 首先,我们先来看一下问题的具体描述。 当我们在一个 div 中加入一个 span,并在 CSS 中给该 span 设定为右对齐时,如果 div 宽度不足以容纳该 span,那么就会出现换行的情况。我们希望解决这个问题,使得该 span 仍然可以右对齐,且不会出现换行的情况。 接下来…

    css 2023年6月10日
    00
  • 如何基于viewport vm适配移动端页面

    下面为您详细讲解如何基于viewport和vm适配移动端页面: 步骤一:设置viewport 在移动端开发中,要实现页面的适配,首要的一步是要设置viewport。 <meta name="viewport" content="width=device-width, initial-scale=1.0"> …

    css 2023年6月9日
    00
  • 使用css实现全兼容浏览器的三角形

    要使用CSS实现全兼容浏览器的三角形,通常有两种方法。 方法一:使用border实现 使用border属性,可以非常简单地实现三角形效果。假设我们要画一个向右的三角形,可以使用以下代码: .triangle { width: 0; height: 0; border-top: 50px solid transparent; border-bottom: 50…

    css 2023年6月9日
    00
  • Bootstrap CSS组件之导航条(navbar)

    Bootstrap CSS组件之导航条(navbar)是Bootstrap中常用的组件之一,它能够帮助我们在网页顶部或底部添加导航菜单,使得网站导航更加方便和美观。下面我将详细讲解如何在网页中使用Bootstrap CSS导航条组件。 1. 引入Bootstrap CSS 首先,我们需要在HTML文档中引入Bootstrap CSS样式文件,可以通过CDN引…

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