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日

相关文章

  • photoshop制作出时尚耐看的深蓝色网站导航效果

    下面是Photoshop制作出时尚耐看的深蓝色网站导航效果的完整攻略: 一、准备工作 打开Photoshop软件,创建一个新的文件,设置文件宽度为1200像素,高度为500像素,背景色为白色。 进入工具栏,选择矩形工具,选中填充颜色为#2e3d49(深蓝色),新建一个矩形,大小设置为1200×80像素,居中放置在新建文件的顶部。 二、制作导航背景效果 选择新…

    css 2023年6月10日
    00
  • Bootstrap每天必学之折叠

    Bootstrap每天必学之折叠 折叠是 Bootstrap 中非常实用的一个组件,它能够让页面上的内容通过二次点击等交互方式展开或隐藏。本篇就来详细讲解 Bootstrap 折叠组件的使用方法。 折叠组件的基本用法 HTML 结构 折叠组件的基础结构需要三个元素,分别是触发折叠的按钮,折叠的内容和容器元素。这里的按钮可以是一个普通按钮或者是一个链接。 以下…

    css 2023年6月10日
    00
  • 浅谈Emergence.js 检测元素可见性的 js 插件

    下面我来为您详细讲解“浅谈Emergence.js 检测元素可见性的 js 插件”的完整攻略。 什么是 Emergence.js? Emergence.js 是一个用于检测元素可见性的 JavaScript 插件。利用 Emergence.js,我们可以在元素进入或离开视口时执行自定义回调函数。它主要应用于以下场景: 图片的懒加载 AJAX 请求的惰性加载 …

    css 2023年6月10日
    00
  • 详解CSS的结构与层叠以及格式化

    详解CSS的结构与层叠以及格式化 CSS的结构 CSS(层叠样式表)是一种用于定义HTML或XML文件中如何样式化元素的语言。CSS采用选择器和声明块的结构,将样式应用于文档的具体元素。 CSS选择器定义了要应用样式的元素,而属性值则定义了应用的样式,这些属性值存储在声明块中。 声明块有以下结构: selector { property: value; pr…

    css 2023年6月9日
    00
  • 通过css3背景控制属性+使用颜色过渡实现渐变效果

    使用 CSS3 的背景控制属性和颜色过渡可以轻松地实现渐变效果,无需使用复杂的图片编辑软件或者大量的 HTML 和 CSS 代码。 1. 使用 linear-gradient 实现线性渐变 linear-gradient 可以创建线性渐变,它需要两个或多个色值作为参数,其中第一个参数用来指定渐变的方向和角度。 例如,下面这段 CSS 代码可以在页面的顶部创建…

    css 2023年6月9日
    00
  • 设置链接颜色的伪类选择符的顺序为LVHA

    设置链接颜色的伪类选择符的顺序为LVHA,其中L、V、H、A分别代表的是Link、Visited、Hover、Active,即链接的默认状态、已访问状态、鼠标悬停状态、被点击状态。按照这个顺序,可以对链接状态进行不同的样式设置。 下面是设置链接颜色的伪类选择符的完整攻略: 1. 设置默认状态的链接颜色 对于链接的默认状态,使用a:link来进行设置。例如,下…

    css 2023年6月9日
    00
  • 纯js实现瀑布流展现照片(自动适应窗口大小)

    实现瀑布流展现照片是一个常见的前端面试题目,这里提供一种利用纯JS实现瀑布流展现照片并自适应窗口大小的方法。实现该方法需要完成以下步骤: 1.根据窗口大小计算瀑布流展示区的宽度、每个卡片的宽度、每行可容纳的卡片个数和卡片间的间隔大小等几个参数,并将它们存储在一个变量对象中。同时,动态创建卡片,并根据图片大小将图片缩放至卡片容器大小。示例代码如下: let c…

    css 2023年6月11日
    00
  • 10分钟入门CSS3 Animation

    下面是针对“10分钟入门CSS3 Animation”的完整攻略: CSS3 Animation是什么 CSS3 Animation是CSS3中的一个模块,其主要作用是创建动态效果,使网页更加生动、活泼。通过CSS3 Animation,可以实现各种复杂的动画效果,如旋转、放大、缩小、褪色等。 CSS3 Animation的语法 CSS3 Animation…

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