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

yizhihongxing

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日

相关文章

  • CSS3媒体查询Media Queries基础学习教程

    让我为您详细讲解“CSS3媒体查询Media Queries基础学习教程”的完整攻略。 什么是CSS3媒体查询Media Queries? CSS3媒体查询(Media Queries)是在CSS3中引入的一种新的特性,它允许在同一份CSS代码中,为不同的设备和展示方式设置不同的样式规则。其中设备指的是各种移动设备、平板电脑、笔记本电脑和桌面电脑等。 媒体查…

    css 2023年6月9日
    00
  • 基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)

    这里给出基于HTML+CSS、jQuery编写的简易计算器添加键盘监听的完整攻略。 1. 准备 在已有基于HTML+CSS、jQuery编写的简易计算器的基础上,添加键盘监听的功能。 HTML+CSS相关代码略,这里主要说明JavaScript的代码。 2. 代码实现 2.1 监听键盘事件 $(document).keydown(function(event…

    css 2023年6月9日
    00
  • 程序员最喜欢哪些Bootstrap模板

    Bootstrap是一个非常受欢迎的前端框架,可以帮助程序员快速构建美观实用的Web页面。许多程序员使用Bootstrap模板来加速他们的开发工作。本篇文章将详细介绍程序员最喜欢哪些Bootstrap模板及其特点。 Bootstrap模板的种类 Bootstrap模板有很多种类,包括响应式、定制化、多样化、单页面、多页面等等。根据不同的需求,程序员可以选择不…

    css 2023年6月11日
    00
  • css FF与IE兼容性总结

    在前端开发中,CSS 的兼容性问题是一个常见的挑战。特别是在 Firefox 和 Internet Explorer(IE)浏览器中,由于它们的渲染引擎不同,可能会导致 CSS 样式在不同浏览器中的显示效果不同。本文将提供一些关于如何解决 CSS 在 Firefox 和 IE 中的兼容性问题的方法,包括一些常见的 CSS 属性和示例说明。 CSS 属性兼容性…

    css 2023年5月18日
    00
  • OpenLayers3实现图层控件功能

    OpenLayers3实现图层控件功能攻略 1. 前言 在WebGIS制作过程中,图层控件是必不可少的,而OpenLayers3也提供了多种方式来实现图层控制。本攻略将介绍两种常用的图层控制方式,分别为基于控件的方法和基于样式函数的方法。 2. 基于控件的方法 2.1 使用LayerSwitcher控件 LayerSwitcher控件是OpenLayers3…

    css 2023年6月10日
    00
  • css下划线颜色一句话代码

    下面是”CSS下划线颜色一句话代码”的完整攻略: 在 CSS 中,下划线的颜色可以通过 text-decoration-color 属性来设置。但是,由于当前文本文档中各段落的下划线颜色可能不同,因此对于某些情况,我们可以使用一些css代码来实现快速设定不同颜色的下划线样式。 下面是两条示例说明: 示例一 a { color: #808080; text-d…

    css 2023年6月9日
    00
  • FCKeditor 2.6.5 ASP环境安装配置使用说明

    FCKeditor 2.6.5 ASP环境安装配置使用说明 安装 FCKeditor 2.6.5 访问 FCKeditor 的官方网站,下载最新的 FCKeditor 2.6.5 的安装包。 解压缩下载的安装包文件,将其中的文件夹 fckeditor 复制到你的网站的根目录下。 配置 FCKeditor 2.6.5 配置 FCKeditor 在网页中的使用。…

    css 2023年6月10日
    00
  • 详解一级导航的制作

    一级导航是网站设计中非常重要的组成部分,它可以让用户轻松地找到自己需要的内容。下面介绍一下制作一级导航的详细攻略。 1. 确定导航分类 在制作一级导航时,首先需要确定网站的分类,这样才能为导航条提供具体的内容。对于新手来说,最好不要过多地划分分类,以免用户在使用网站时产生疑惑。例如一个简单的分类可以是:首页、产品、新闻等。 2. 设计导航条 在确定分类之后,…

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