138-139-----JS基础-----二级菜单-完成基本功能、过渡效果

2023-11-20

一 代码

这两节的代码还是有点的难度的,有这样的需求时,按照类似的接口去做即可,不一定要和他的需求完全一样。

因为我看他的需求好像点开另一个,已经打开的选项会被自动关闭,这样感觉不好,因为可能用户有时想要看到所有的选项的要求。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>二级菜单</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
				list-style-type: none;
			}
			
			a,img {
				border: 0;
				text-decoration: none;
			}
			
			body {
				font: 12px/180% Arial, Helvetica, sans-serif, "新宋体";
			}
		</style>

		<link rel="stylesheet" type="text/css" href="css/sdmenu.css" />
		
		<script type="text/javascript" src="js/tools.js"></script>
		<script type="text/javascript">
			window.onload = function(){
				
				/*
				 * 1. 我们的每一个菜单都是一个div
				 * 	当div具有collapsed这个类时,div就是折叠的状态
				 * 	当div没有这个类是,div就是展开的状态
				 */
				
				/*
				 * 2. 点击菜单,切换菜单的显示状态
				 */
				//获取所有的class为menuSpan的元素
				var menuSpan = document.querySelectorAll(".menuSpan");
				
				//定义一个变量,来保存当前打开的菜单
				var openDiv = menuSpan[0].parentNode;
				
				//为span绑定单击响应函数
				for(var i=0 ; i<menuSpan.length ; i++){
					menuSpan[i].onclick = function(){
						
						// 3. this代表我当前点击的span
						//获取当前span的父元素
						var parentDiv = this.parentNode;
						
						// 4. 切换菜单的显示状态
						toggleMenu(parentDiv);
						
						
						// 5. 判断openDiv和parentDiv是否相同
						if(openDiv != parentDiv  && !hasClass(openDiv , "collapsed")){
							//打开菜单以后,应该关闭之前打开的菜单
							//为了可以统一处理动画过渡效果,我们希望在这将addClass改为toggleClass
							//addClass(openDiv , "collapsed");
							//此处toggleClass()不需要有移除的功能
							//toggleClass(openDiv , "collapsed");
							//切换菜单的显示状态
							toggleMenu(openDiv);
						}
						
						// 6. 修改openDiv为当前打开的菜单
						openDiv = parentDiv;
						
					};
				}
				
				/*
				 * 7. 用来切换菜单折叠和显示状态
				 */
				function toggleMenu(obj){
					//在切换类之前,获取元素的高度
					var begin = obj.offsetHeight;
					
					//切换parentDiv的显示
					toggleClass(obj , "collapsed");
					
					//在切换类之后获取一个高度
					var end = obj.offsetHeight;
					
					//console.log("begin = "+begin +" , end = "+end);
					//动画效果就是将高度从begin向end过渡
					//将元素的高度重置为begin
					obj.style.height = begin + "px";
					
					//执行动画,从bengin向end过渡
					move(obj,"height",end,10,function(){
						//动画执行完毕,内联样式已经没有存在的意义了,删除之
						obj.style.height = "";
					});
						
				}
				
				
			};
			
			
		</script>
		
	</head>

	<body>

		<div id="my_menu" class="sdmenu">
			<div>
				<span class="menuSpan">在线工具</span>
				<a href="#">图像优化</a>
				<a href="#">收藏夹图标生成器</a>
				<a href="#">邮件</a>
				<a href="#">htaccess密码</a>
				<a href="#">梯度图像</a>
				<a href="#">按钮生成器</a>
			</div>
			<div class="collapsed">
				<span class="menuSpan">支持我们</span>
				<a href="#">推荐我们</a>
				<a href="#">链接我们</a>
				<a href="#">网络资源</a>
			</div>
			<div class="collapsed">
				<span class="menuSpan">合作伙伴</span>
				<a href="#">JavaScript工具包</a>
				<a href="#">CSS驱动</a>
				<a href="#">CodingForums</a>
				<a href="#">CSS例子</a>
			</div>
			<div class="collapsed">
				<span class="menuSpan">测试电流</span>
				<a href="#">Current or not</a>
				<a href="#">Current or not</a>
				<a href="#">Current or not</a>
				<a href="#">Current or not</a>
			</div>
		</div>
	</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

138-139-----JS基础-----二级菜单-完成基本功能、过渡效果 的相关文章

  • 我可以补间 D3 弧的结束角度,但不能补间起始角度。我究竟做错了什么?

    我只是在玩这个演示并自己重新创建它 http bl ocks org mbostock 5100636 http bl ocks org mbostock 5100636 我可以定义一个新的 endAngle 并且它会很好地制作动画 但现在
  • Javascript时间转换正则表达式

    我有一种使用 Net 中的正则表达式来转换时间的方法 例如 1h 20m 格式为双倍 就这个 public static double GetTaskHours this string tmpHours Double taskHours 0
  • 如何在javascript中实现deque数据结构?

    我正在用 javascript 学习数据结构 我现在的重点是如何实现双端队列 编辑 从下面的评论中我得到了有关如何实施的有用指示deque based array 有没有一个具体实施的方向deque based object使用类 我明白了
  • 预计来电次数:>= 1 已接来电次数:0

    我正在学习带有钩子的reactjs表单 现在我想使用jest和enzyme测试提交时的表单 这是我的登录组件 import React from react function Login const email setEmail useSt
  • 如何全局公开 es6 模块

    我需要编写一个可在全局窗口上使用的模块 我使用 es6 创建模块 我定义的每个类都有它自己的文件 我正在使用 webpack 来 babelify 并捆绑这些类 我的模块的入口点也是包含要公开的全局的文件 我尝试了各种方法来实现这一点 包括
  • 如何使用 ASP.Net 中的 PageMethods 将多维数组从 Javascript 传递到服务器

    我有一些 li 我的 HTML 页面中的项目如下 li li class ui state default Item 2 li li class ui state default Item 3 li li class ui state de
  • Fabric JS html 5 图像弯曲选项

    我想用html5工具制作图像曲线 我使用 Fabric js 作为 html5 画布工具 请指导我如何在杯子 玻璃 圆柱形或圆形产品等图像上制作弯曲图像 参考号图片如下 http vsdemo cwwws com Images Produc
  • 使用 MapBox GL JS 无需访问令牌

    有没有办法使用MapBox GL JS没有访问令牌 我在文档中找不到任何提示MapBox GL JS https docs mapbox com mapbox gl js api 然而 Uber建议是可以通过他们的图书馆 https ube
  • 打字稿地图迭代失败

    我正在使用下面的函数来比较两个地图 有趣的是 for 循环内的代码永远不会被执行 所以 console log key val 代码永远不会被执行 当然 我确保我正在比较的映射不为空并且大小相同 以强制执行 for 循环内的代码 我犯了一个
  • 电话链接在 iframe 中不起作用,但在 iOS 9 Web 中的 div 中起作用。如何使电话链接在 iOS 9 safari 中正常工作?

    您好 我正在尝试 iOS9 中 iframe 内的电话链接 iOS9 中的 safari 中无法打开手机应用程序 当我在里面尝试相同的链接时 它就在那里工作 我正在尝试下面的锚标记 将此代码放入 div 中时会打开手机应用程序 但同样的代码
  • JavaScript:异常排序

    假设我有一个对象数组 为了更简单的显示目的 我将其显示为数组 TEST NEW ALPHA ZOO WHATEVER 我需要按字母顺序对其进行排序 简单的部分 但是 我需要以某种方式对其进行排序 即某个单词 可以说NEW将会在最后结束 AL
  • 如何在没有 Web 服务器的情况下运行 ajax 代码?

    我在系统上没有服务器的情况下运行ajax 我用它创建了一个index html JavaScript 函数 function do the click url alert inside this method do the click aj
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • PapaParse 与 Angular JS

    喜欢 PapaParse 漂亮的 CSV 解析器和解解析器 任何人都可以帮助我将其与 Angular JS 结合起来吗 我喜欢让 PapaParse 以 Angular 方式工作 正在尝试解决方案 实际上我没有做任何花哨的事情来加载它 只需
  • PHP/Web 脚本保护

    我想用 PHP 和 javascript 编写一个脚本 并以某种方式保护我的源代码 以便我可以出售我的脚本 我正在寻找如何保护我的脚本的想法 如果我将其出售给某人 我如何阻止该人将其作为他们的产品重新分发 我知道有ZEND和ionCube
  • 双向数据绑定(Angular)与单向数据流(React/Flux)

    上周 我一直在试图弄清楚如何双向数据绑定 Angular https docs angularjs org guide databinding and 单向数据流 React Flux https youtu be i 969noyAM是不
  • 在多个 html 文件上运行 javascript

    我有一个包含 1000 个 html 文件的文件夹 我必须使用 xpath 从每个 html 中删除某些节点 所以我已经制作了javascript 我无法打开每个文件并通过 Firefox 控制台运行 javascript 我用的是linu
  • 在 JavaScript 中,将 NodeList 转换为数组的最佳方法是什么?

    DOM 方法document querySelectorAll 和其他一些 返回一个NodeList 对列表进行操作 例如使用forEach the NodeList必须首先转换为Array 转换的最佳方式是什么NodeList to an
  • JavaScript Intellisense 在 Visual Studio 2015 中不起作用

    我知道这个问题在网上以及整个网络上都有很多重复的问题 不幸的是 所提出的建议都不起作用 除了重新安装 VS 15 之外 我已经完成了所有操作 如果我可以帮助的话 我宁愿不这样做 我去过的一个网站 references js 背后的故事 ht
  • setInterval 会导致浏览器挂起吗?

    几年前 我被警告不要使用setInterval很长一段时间 因为如果被调用的函数运行时间超过指定的时间间隔 可能会导致浏览器挂起 然后无法跟上 setInterval function foo bar i 1 现在 我知道在循环中添加大量代

随机推荐

  • 基本逻辑运算

    目录 1 与 2 或 3 非 4 与非 5 或非 6 异或 7 同或 1 与 输入有零 输出为0 输入全1 输出才1 1 逻辑表达式 L A B
  • windows下安装ElasticSearch的Head插件

    es5以上版本安装head需要安装node和grunt 1 从https nodejs org en download 下载相应系统的msi 双击安装 2 安装完成用cmd进入安装目录执行 node v 可查看版本号 3 执行 npm in
  • github搭建个人博客报错分析及用法总结

    注册可以参考csdn中关于注册的相关博客 这里我想说的是 当重复注册 出现github账号被标记的情况 或者操作失误所产生的不能搭建个人博客的问题 遇到这种问题 直接联系管理员就好 一封礼貌的email就可以解决问题 1 每个人只能注册一个
  • C/C++实现输入终止则循环结束

    C while scanf d n EOF C while cin gt gt N
  • 【Windows】局域网内共享文件夹的设置方法

    引言 Windows 系统自带有文件共享功能 可实现局域网内简单的协同办公 本文简单介绍一下该功能该如何使用 需求 假设这里有两台在同一局域网的电脑 设备别名分别定义为 pc1 和 pc2 现在 pc1 桌面上建立一个名为 public 的
  • Street Workout

    sw网站 网站简介 很早就有了这个想法 但是无奈一直没有去做 终于到了这个寒假 2019 2020上 开始编码了 作为自己第一个单独开发的网站 经过了十多天的堆码 终于完成了大概的框架 虽然没有什么浏览量但是还是挺开心的 话不多说 放图 多
  • java获取指定时间前N天和后N天

    获取指定时间前N天后N天 Test public void getLastDay String time public void getLastDay SimpleDateFormat sdf new SimpleDateFormat yy
  • iPhone上查询UDID

    查找设备的 UDID 有多种方式 可以通过 iTunes 或 Finder 查找 也可以通过 Xcode 查找 这里介绍一种在线通过 iPhone 或 iPad 直接查找 UDID 的方法 1 在 iOS 设备上打开 Safari 浏览器
  • 华为OD机试 - 食堂供餐(Java)

    题目描述 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少价盒饭才能满足要求
  • H5微信分享记录

    最近做H5微信分享 用的微信jssdk来做 现记录下一些过程和遇到的问题 一 公众号配置 微信官方文档 已经说明了使用步骤 公众号配置比较模糊 主要是要配置ip白名单和绑定js接口安全域名 1 检查分享接口权限是否已获得 在微信公众号的 设
  • 考虑载波和采样频率的2PSK调制 MATLAB仿真

    功能 生成psk调制信号 创建日期 2016 7 27 创建人 Alice 764499604 qq com clear all close all clc max 100 g zeros 1 max g randint 1 max 长度为
  • CentOS 7 安装 Python 3

    文章目录 前言 操作系统说明 在线安装 离线安装 环境 组件说明 组件用途说明 安装步骤 详细步骤 准备安装 搜集 下载 安装依赖 安装 Python 安装 virtualenv 异常处理 异常信息 原因分析 处理方法 小技巧 前言 推荐在
  • 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业 (1)

    HTML5期末大作业 动漫电影主题 电影动漫言叶之庭 4页 带音乐 HTML CSS JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 大学生毕设网页设计源码HTML 1 临近期末 你还在为H
  • element 中 datepicker设置,只能选中今天以及之前日期

    1 只能选择当前及以后的日期
  • 六,RBAC简介

    六 RBAC RBAC 基于角色的权限控制 role base access control 是一种设计模式 是用来设计和管理权限相关数据的一种模型 RBAC权限数据的管理 都是重复的CRUD的操作 这里我们就不再重复的从0到1开发 我们只
  • 在预训练时使用Warm Up的理解以及loss plateau。

    在预训练时使用Warm Up的理解 之前在wikitext 103上预训练Bert base的时候 发现loss曲线会平一段然后再下降 大概是像下图这样 横轴是step 纵轴是loss 当时的warm up是前16K step 一直以为第二
  • Python3 pip

    Python3 中的 pip 是一个常用的包管理工具 它可以用来下载 安装和卸载 Python 包 以下是一些常用的 pip 命令 1 安装包 pip install package name 例如 要安装 Flask 框架 可以使用命令
  • C++中vector删除指定位置的元素

    1 可以用erase方法删除vector指定位置的元素 2 例程 include
  • IAR 编译异常记录

    问题一 问题描述 WARNING the connected j link is defective proper operation cannot be guaranteed 连接的J Link不良 无法保证正确操作 问题原因 驱动版本与
  • 138-139-----JS基础-----二级菜单-完成基本功能、过渡效果

    一 代码 这两节的代码还是有点的难度的 有这样的需求时 按照类似的接口去做即可 不一定要和他的需求完全一样 因为我看他的需求好像点开另一个 已经打开的选项会被自动关闭 这样感觉不好 因为可能用户有时想要看到所有的选项的要求