js实现盒子滚动动画效果

yizhihongxing

下面是关于"js实现盒子滚动动画效果"的完整攻略:

1.编写HTML结构

首先,在HTML文件中编写盒子结构,例如:

<div class="container">
  <div class="box" style="background-color: red;">Box 1</div>
  <div class="box" style="background-color: blue;">Box 2</div>
  <div class="box" style="background-color: green;">Box 3</div>
  <div class="box" style="background-color: yellow;">Box 4</div>
</div>

这里是一个包含4个盒子的简单结构,每个盒子的背景颜色不同。

2.设置CSS样式

接下来,在CSS文件中为盒子设置样式,以及设置包含盒子的容器的样式:

.container {
  width: 300px;
  height: 200px;
  overflow: hidden;
  position: relative;
}

.box {
  width: 300px;
  height: 200px;
  position: absolute;
  left: 0;
  top: 0;
  transition: transform 0.5s ease-in-out;
}

这里,我们给包含盒子的容器设置宽度、高度和overflow:hidden,以便在处理盒子滚动时,通过设置容器为不可见,只显示其中某一部分盒子的方式来实现动画效果。

为了让内容向左或向右滚动,我们让每个盒子的位置为position: absolute,并且将其放置在较低左侧部分。在随后的JavaScript中,当我们想要使一个盒子向右或向左移动时,我们将改变其left属性的值。

3.编写JavaScript

接下来,我们需要编写JavaScript代码来实现盒子的滚动效果。首先,我们需要定义一些常量和变量:

const container = document.querySelector('.container');
const boxes = document.querySelectorAll('.box');

const previousButton = document.querySelector('.previous');
const nextButton = document.querySelector('.next');

const boxWidth = boxes[0].clientWidth;
const containerWidth = container.clientWidth;
const numberOfBoxes = boxes.length;

let currentIndex = 0;
let position = 0;

这里我们使用document.querySelector()选择器来获取盒子容器和盒子。我们还获取控制滚动的前后按钮,以及计算盒子的宽度和数量。

我们还定义了一个变量currentIndex,它将跟踪当前选中的盒子的索引。position变量则将保持滚动位置的距离。

接下来,我们通过addEventListener()方法为两个控制滚动的按钮添加单击事件监听器,这些事件监听器将根据我们所点击的按钮来调用相应的函数实现。

previousButton.addEventListener('click', scrollToPreviousBox);
nextButton.addEventListener('click', scrollToNextBox);

在这里,我们定义了两个函数scrollToPreviousBoxscrollToNextBox,它们将实现向前或向后动画的功能。

滚动到前面的盒子

function scrollToPreviousBox() {

// 先删除当前选中盒子的处理
boxes[currentIndex].classList.remove('selected');

// 更新currentIndex和位置变量,使它们反映哪个盒子当前选中
currentIndex -= 1;
position += boxWidth;

// 检查我们是否已经滚动到了第一个盒子,如果是,则将当前位置变量重置为0,以便第一个盒子被重新选择
if (currentIndex === -1) {
  currentIndex = numberOfBoxes - 1;
  position = -(currentIndex * boxWidth);
}

// 为当前选中的盒子添加效果处理并应用变换样式
boxes[currentIndex].classList.add('selected');
container.style.transform = `translateX(${position}px)`;
}

这个函数首先从当前选中的盒子中删除效果,然后通过更新currentIndexposition变量来移动到前一个盒子。

接下来,我们检查是否已滚动到第一个盒子,如果是,则将当前位置变量重置为0,并将currentIndex设置为最后一个盒子的索引以循环效果。

最后,我们为新选中盒子添加效果,并采用translateX方式移动容器。

滚动到后面的盒子

function scrollToNextBox() {

// 先删除当前选中盒子的处理
boxes[currentIndex].classList.remove('selected');

// 更新currentIndex和位置变量,使它们反映哪个盒子当前选中
currentIndex += 1;
position -= boxWidth;

// 检查我们是否已经滚动到了最后一个盒子,如果是,则将当前位置变量重置为0,以便第一个盒子被重新选择
if (currentIndex === numberOfBoxes) {
  currentIndex = 0;
  position = 0;
}

// 为当前选中的盒子添加效果处理并应用变换样式
boxes[currentIndex].classList.add('selected');
container.style.transform = `translateX(${position}px)`;
}

这个函数以相同的基本方式运行,只是向前滚动而不是向后滚动。当我们到达最后一个盒子时,我们将currentIndexposition变量重置为0,并将其设为第一个盒子的索引以达到循环效果。

4.为选中的盒子应用效果

最后,我们需要为选中的盒子添加效果处理。我们将使用CSS中的一个.selected类来做到这一点:

.box.selected {
  transform: scale(1.2);
  z-index: 1;
}

在这里,当盒子被选中时,我们将其放大。我们还通过增加z-index属性来使它的叠放顺序更高,以便它显示在其余盒子的顶部。

5.效果示例

这是一个最终的Demo,可以完整展示出盒子滚动效果的实现。

<!DOCTYPE html>
<html>
<head>
  <title>JS实现盒子滚动动画效果</title>
  <style>
    .container {
      width: 300px;
      height: 200px;
      overflow: hidden;
      position: relative;
    }
    .box {
      width: 300px;
      height: 200px;
      position: absolute;
      left: 0;
      top: 0;
      transition: transform 0.5s ease-in-out;
    }
    .box.selected {
      transform: scale(1.2);
      z-index: 1;
    }
    .previous, .next {
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      background-color: rgba(0,0,0,0.2);
      width: 25px;
      height: 25px;
      color: white;
      font-size: 14px;
      text-align: center;
      cursor: pointer;
    }
    .previous {
      left: 0;
    }
    .next {
      right: 0;
    }
  </style>
</head>
<body>

<div class="container">
  <div class="box" style="background-color: red;">Box 1</div>
  <div class="box" style="background-color: blue;">Box 2</div>
  <div class="box" style="background-color: green;">Box 3</div>
  <div class="box" style="background-color: yellow;">Box 4</div>

  <div class="previous">&lt;</div>
  <div class="next">&gt;</div>
</div>

<script>
const container = document.querySelector('.container');
const boxes = document.querySelectorAll('.box');
const previousButton = document.querySelector('.previous');
const nextButton = document.querySelector('.next');
const boxWidth = boxes[0].clientWidth;
const containerWidth = container.clientWidth;
const numberOfBoxes = boxes.length;
let currentIndex = 0;
let position = 0;

function scrollToNextBox() {
  boxes[currentIndex].classList.remove('selected');
  currentIndex += 1;
  position -= boxWidth;
  if (currentIndex === numberOfBoxes) {
    currentIndex = 0;
    position = 0;
  }
  boxes[currentIndex].classList.add('selected');
  container.style.transform = `translateX(${position}px)`;
}

function scrollToPreviousBox() {
  boxes[currentIndex].classList.remove('selected');
  currentIndex -= 1;
  position += boxWidth;
  if (currentIndex === -1) {
    currentIndex = numberOfBoxes - 1;
    position = -(currentIndex * boxWidth);
  }
  boxes[currentIndex].classList.add('selected');
  container.style.transform = `translateX(${position}px)`;
}

previousButton.addEventListener('click', scrollToPreviousBox);
nextButton.addEventListener('click', scrollToNextBox);

boxes[0].classList.add('selected');
</script>

</body>
</html>

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

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

相关文章

  • Js遍历键值对形式对象或Map形式的方法

    当我们需要遍历键值对形式的对象或Map时,可以使用JavaScript中的for…in循环和forEach方法。 for…in循环 for…in循环可以遍历对象和Map中的所有键值对,格式如下: for(var key in obj/map) { // 对每个键值对进行操作 } 其中,key是对象/Map中的每个键,obj/map是我们需要遍历的…

    JavaScript 2023年5月27日
    00
  • javascript时间自动刷新实现原理与步骤

    JavaScript 时间自动刷新实现主要是通过不断更新页面上显示的日期和时间来实现,其实现步骤主要包括以下几步: 创建用于显示时间的 HTML 元素。可以使用 p 或 span 等标签,例如: <p id="time"></p> 创建用于更新时间的 JavaScript 函数。该函数需要通过定时器来不断更新时间,…

    JavaScript 2023年5月27日
    00
  • threejs全景图和锚点编辑的实现方案

    让我来为您详细讲解“threejs全景图和锚点编辑的实现方案”吧。 前言 在讲解实现方案前,需要了解一下全景图和锚点的基本概念。 什么是全景图? 全景图是一种圆形或球形的图像,可以通过鼠标或手指的滑动来改变视角,从而可以在360度范围内观察场景中的所有细节,给人带来身临其境的感觉。 什么是锚点? 锚点是指在全景图中设置的一个或多个可点击的点,当用户点击锚点时…

    JavaScript 2023年6月11日
    00
  • js闭包所用的场合以及优缺点分析

    JS闭包是指函数可以访问当前环境外的变量,并在执行后保留对这些变量的引用。通俗的说,就是函数内部的函数可以访问函数外部函数的变量。下面我们来一步一步详细讲解JS闭包所用的场合以及优缺点分析。 什么是闭包 在JS中,每当创建一个函数,该函数就会创建一个作用域(scope)链。作用域链可以帮助函数在查找变量时,逐级向上进行查找,直到找到为止。而闭包,正是通过这个…

    JavaScript 2023年6月10日
    00
  • js 变量类型转换常用函数与代码[比较全]

    JS 变量类型转换常用函数与代码 本文介绍 JavaScript 中常用的变量类型转换函数以及相应的代码示例。 变量类型转换函数 1. Number() Number() 函数用于将字符串或其他类型的值转换为数字类型。 Number(‘123′); // 123 Number(’42px’); // NaN,无法将字符型的’42px’转换为数字类型 Numb…

    JavaScript 2023年5月27日
    00
  • 详解ES6数组方法find()、findIndex()的总结

    详解ES6数组方法find()、findIndex()的总结 简介 在ES6中,数组方法新增了许多实用的功能,包括find()和findIndex()。这两个方法常用于数组中搜索特定元素,并返回符合条件的元素。下面我们就来详细讲解下这两个方法的使用。 find() find()方法用于查找符合指定条件的第一个数组元素,并返回该元素。如果没有找到匹配的元素,则…

    JavaScript 2023年5月27日
    00
  • JS中的数组的sort方法使用示例

    下面是“JS中的数组的sort方法使用示例”的完整攻略。 什么是sort方法 sort方法是JavaScript中数组原型对象的一个方法,可以用来对数组元素进行排序操作。sort方法默认按照字符编码的顺序进行排序。 sort方法基本语法 sort方法的基本语法如下: array.sort([compareFunction]) 其中,array是待排序的数组对…

    JavaScript 2023年5月27日
    00
  • javascript 两个字符串比较函数

    下面是关于 JavaScript 字符串比较函数的完整攻略。 在 JavaScript 中比较字符串时,有两个比较函数可以使用: localeCompare():用于比较给定字符串与目标字符串的顺序关系,根据本地化规则和当前语言环境来进行比较,支持多种语言。该函数返回一个数字,表示两个字符串的大小关系。 charCodeAt():返回字符串中指定位置的字符的…

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