JS+CSS实现简单滑动门(滑动菜单)效果

JS+CSS实现简单滑动门(滑动菜单)效果,可以通过CSS的transition和transform属性以及JavaScript的事件处理函数来实现。

HTML结构

首先,在HTML中需要通过标签嵌套来构建滑动门的结构。以两个滑动门为例:

<div class="slider">
  <div class="slider-item">菜单1</div>
  <div class="slider-item">菜单2</div>
</div>

CSS样式设置

接下来,在CSS中设置样式。样式中需要设置滑动门的基本样式和hover状态时的样式。

.slider {
  position: relative;
  display: flex;
  justify-content: space-between;
  width: 400px;
  height: 50px;
  background-color: #ddd;
}

.slider-item {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50%;
  height: 50px;
  background-color: #fff;
  transition: transform .3s ease-out;
}

.slider-item:hover {
  transform: translateY(-10px);
}

这里的样式设置了滑动门的基本样式,其中.slider类设置了滑动门的基本样式,包括display: flex设置为flex布局、justify-content: space-between设置为两个菜单之间的间距相等、width: 400px设置滑动门的宽度、height: 50px设置滑动门的高度、background-color: #ddd设置滑动门的背景颜色。

.slider-item类设置了滑动门菜单的样式,包括display: flex设置为flex布局、justify-content: center设置为菜单内容水平居中、align-items: center设置为菜单内容垂直居中、width: 50%设置为两个菜单宽度均分、height: 50px设置菜单的高度、background-color: #fff设置菜单的背景颜色,并设置了transition: transform .3s ease-out表示菜单切换时的过渡动画效果为transform属性的变化,时间为.3s,动画效果为ease-out。

.slider-item:hover类设置了菜单hover时的样式,包括transform: translateY(-10px)设置菜单向上移动10px的动画效果。

JavaScript事件处理函数

最后,需要通过JavaScript的事件处理函数来实现滑动门菜单的效果。

const slider = document.querySelector('.slider');
const sliderItems = document.querySelectorAll('.slider-item');

sliderItems.forEach((item, index) => {
  item.addEventListener('click', () => {
    sliderItems.forEach(item => item.classList.remove('active'));
    item.classList.add('active');
    slider.style.setProperty('--pos', `${index * -50}%`);
  });
});

这段JavaScript代码中,首先通过document.querySelector获取到.slider.slider-item元素。然后,通过forEach方法遍历所有.slider-item元素,并为每个元素添加click事件监听器。当元素被点击时,先通过forEach方法将所有元素的active类样式移除,然后将当前点击的元素添加上active类样式。

接下来使用CSS变量--pos,通过JavaScript代码将其设置为菜单的左偏移量,以实现菜单的滑动效果。

示例1

下面是一个完整的示例代码:

<div class="slider">
  <div class="slider-item active">菜单1</div>
  <div class="slider-item">菜单2</div>
</div>

<style>
  .slider {
    position: relative;
    display: flex;
    justify-content: space-between;
    width: 400px;
    height: 50px;
    background-color: #ddd;
    overflow: hidden;
  }

  .slider-item {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 50%;
    height: 50px;
    background-color: #fff;
    transition: transform .3s ease-out;
  }

  .slider-item:hover {
    transform: translateY(-10px);
  }

  .active {
    color: red;
  }

  .slider::before,
  .slider::after {
    content: "";
    position: absolute;
    width: 50%;
    height: 50px;
    background-color: #ddd;
  }

  .slider::before {
    left: 0;
    transform: var(--pos, 0);
    transition: transform .3s ease-out;
  }

  .slider::after {
    right: 0;
    transform: var(--pos, 0);
    transition: transform .3s ease-out;
  }
</style>

<script>
  const slider = document.querySelector('.slider');
  const sliderItems = document.querySelectorAll('.slider-item');

  sliderItems.forEach((item, index) => {
    item.addEventListener('click', () => {
      sliderItems.forEach(item => item.classList.remove('active'));
      item.classList.add('active');
      slider.style.setProperty('--pos', `${index * -50}%`);
    });
  });
</script>

示例2

下面是另一个完整的示例代码:

<div class="slider">
  <div class="slider-item active">菜单1</div>
  <div class="slider-item">菜单2</div>
  <div class="slider-item">菜单3</div>
  <div class="slider-item">菜单4</div>
  <div class="slider-item">菜单5</div>
</div>

<style>
  .slider {
    position: relative;
    display: flex;
    justify-content: space-between;
    width: 400px;
    height: 50px;
    background-color: #ddd;
    overflow: hidden;
  }

  .slider-item {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 20%;
    height: 50px;
    background-color: #fff;
    transition: transform .3s ease-out;
  }

  .slider-item:hover {
    transform: translateY(-10px);
  }

  .active {
    color: red;
  }

  .slider::before,
  .slider::after {
    content: "";
    position: absolute;
    width: 20%;
    height: 50px;
    background-color: #ddd;
  }

  .slider::before {
    left: 0;
    transform: var(--pos, 0);
    transition: transform .3s ease-out;
  }

  .slider::after {
    right: 0;
    transform: var(--pos, 0);
    transition: transform .3s ease-out;
  }
</style>

<script>
  const slider = document.querySelector('.slider');
  const sliderItems = document.querySelectorAll('.slider-item');

  sliderItems.forEach((item, index) => {
    item.addEventListener('click', () => {
      sliderItems.forEach(item => item.classList.remove('active'));
      item.classList.add('active');
      slider.style.setProperty('--pos', `${index * -20}%`);
    });
  });
</script>

在这个示例中,.slider元素的宽度为400px,一共有5个子元素,每个子元素的宽度为20%,菜单的滑动效果将每个元素的左偏移设置为index * -20%。这里还添加了一个:before和:after的伪元素,用于填充起始位置和结束位置的空隙,设置宽度为20%即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+CSS实现简单滑动门(滑动菜单)效果 - Python技术站

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

相关文章

  • CSS 设置滚动条样式的实例代码

    下面是详细讲解“CSS 设置滚动条样式的实例代码”的完整攻略: 1. CSS 设置滚动条样式的原理 在 CSS 中,我们可以通过 ::-webkit-scrollbar 伪元素选择器以及一些属性来调整滚动条的样式。 2. 滚动条样式基础 第一步,我们可以使用 ::-webkit-scrollbar 选择器来选中滚动条。比如说,我们可以改变滚动条的宽高、颜色等…

    css 2023年6月13日
    00
  • jQuery实现可高亮显示的二级CSS菜单效果

    接下来我将详细讲解如何使用jQuery实现可高亮显示的二级CSS菜单效果。 1. 实现思路 我们需要使用jQuery来实现二级可高亮的CSS菜单,具体的实现思路如下: 使用HTML和CSS来定义网站的菜单结构和样式。 使用jQuery来控制菜单的行为和交互效果。 使用JavaScript的基本语法(如选择器、事件处理等)来编写jQuery代码实现菜单效果。 …

    css 2023年6月10日
    00
  • CSS圆形旋转效果 纯CSS制作圆形旋转菜单效果(七步完成)

    下面我来详细讲解一下“CSS圆形旋转效果 纯CSS制作圆形旋转菜单效果(七步完成)”的完整攻略。 1. 确定HTML结构 首先,我们需要确定圆形旋转菜单的HTML结构。一般情况下,我们可以使用<ul>和<li>标签来实现。具体代码如下: <ul class="menu"> <li><a…

    css 2023年6月9日
    00
  • 对未知高度的图片设置垂直居中的方法详解

    下面是「对未知高度的图片设置垂直居中的方法详解」的攻略: 1. 使用CSS3的Transform属性 我们可以使用CSS3的Transform属性来实现垂直居中的效果。具体的做法是: 将图片设置为绝对定位,然后设置父元素的position属性为相对定位。接着,设置图片的top和left值为50%,并使用Transform属性进行平移。 代码示例: HTML …

    css 2023年6月10日
    00
  • css3图片边框border-image的用法

    下面是 “CSS3图片边框(border-image)的用法”的详细攻略: 什么是border-image? “border-image”属性允许创建一个自定义的边框,这个边框可以是由图像组成的,而不是单一颜色的线条。通过使用 “border-image” 属性,你可以在几乎任何 HTML 元素边框上使用贴图。 怎样使用border-image属性 bord…

    css 2023年6月10日
    00
  • 微信小程序 滚动选择器(时间日期)详解及实例代码

    下面就为大家详细讲解微信小程序中的滚动选择器(时间日期)的相关知识及实例代码,包括使用步骤、代码实现以及注意事项等内容。 一、滚动选择器介绍 滚动选择器在小程序中可以用来让用户从一组可选项中进行选择。它提供了一种非常方便的选择方式,不仅适用于时间日期的选择,而且也适用于其他类型的选择。 在小程序中,时间日期选择器是通过 picker 组件实现的。picker…

    css 2023年6月9日
    00
  • html div 透明样式示例代码

    HTML中的div是一个容器标签,可以用来组织网页中的不同元素、模块或小部件。下面我们来讲解一下如何给html div添加透明样式。 HTML透明样式基础 在HTML中,可以使用CSS的opacity属性来控制元素的透明度。该属性的取值范围是0.0到1.0之间,其中0.0表示完全透明,1.0表示完全不透明。如果设置介于0.0和1.0之间的任何值,元素的透明度…

    css 2023年6月9日
    00
  • CSS filter:hue-rotate色调旋转滤镜实现按钮批量生产

    对于“CSS filter:hue-rotate色调旋转滤镜实现按钮批量生产”的完整攻略,建议分为以下几个部分来讲解: 色调旋转滤镜的基本知识 通过CSS实现色调旋转滤镜效果 批量生产按钮的方法 下面我会详细讲解每个部分。 1. 色调旋转滤镜的基本知识 色调旋转滤镜是CSS filter滤镜中的一个函数,语法格式如下: filter: hue-rotate(…

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