来帮同学解答一个问题
章节
问答
课签
笔记
评论
占位
占位

编程挑战

小伙伴们,根据所学知识,实现下图所示的菜单效果,实现点击菜单中的向下三角展开菜单,点击页面空白处收起菜单,按下键盘上的向上、向下方向键可以选中对应的选项,鼠标点击或按下回车键将当前高亮的选项内容设为菜单的标题

效果图:

初始:

点击三角:

点击选中项:

任务

一、 点击菜单中的向下三角展开菜单

 

提示:
     1、点击三角时需阻止事件冒泡


二、 展开菜单之后,在document对象上绑定keyup事件,按下向下方向键,选中下一个选项,按下向上方向键,选中上一个选项,按下回车键菜单收起,显示选中项

 

提示:
1、 声明一个全局的index变量初值为-1
2、 按下向下方向键时index递增,当递增至大于等于菜单选项的总数时恢复为0
3、 按下向上方向键时判断index,如若小于等于0则设为菜单选项的总数,之后递减index
4、 根据index值将对应的选项设为当前(灰色背景)
5、 按下回车键时将对应选中的选项设为菜单标题,且将所有选项设为无背景,index恢复为-1,菜单收起

注意:没有任何选项被选中时,按下回车键不做任何操作

 

三、鼠标滑过每个选项时高亮显示,离开时去掉背景,点击高亮选项时菜单标题改变

 

提示:
   1.遍历所有a标签,绑定鼠标点击的事件

注意:要考虑到浏览器兼容,使用innerHTML,不要使用innerText

 

四、点击页面空白处收起菜单

 

提示:
   1.绑定在document对象上
?不会了怎么办
||
1
2
<!doctype html>
<html lang="en"
    >
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / 慕梦前来
那是事件一起发现了,要做处理的

最新回答 / 颴嵇
你显示的 是<li> 标签的 HTML内容,可不是有HTML内容.可以用正则去掉HTML标签,<...code...>像这样:  title.innerHTML = this.innerHTML;  
title.innerHTML = replaceHTML(this.innerHTML)

最新回答 / qq圐圙2
这里的this相当于e.target或e.srcElement,自己给自己解答了,谢谢大家

最赞回答 / Eric_lc
首先这个是为了练习事件;其次select用于表单提交,虽然样式可以调整,但在它自身固定的标签下只能存在option,如果定制程度更高的自定义内容嵌套等效果,就需要使用div这种去模拟

已采纳回答 / 保卫家乡
#divselect cite:after{content:"▼";display:block;position:absolute;right:5px;top:3px;}自己添加一个箭头吧。

最新回答 / qq_Rainy小迪_0
<...图片...>这个event是不是要和下面保持一致。

最新回答 / 茶和散客
我也这样,看了别人的代码,发现要阻止事件冒泡啊;试了一下,确实可以

已采纳回答 / xll19950213
<...code...>事件触发时,函数中的代码从上到下的运行。如果不遍历菜单数组将每个选项的背景重置为白色,那么按一次向下键就有一个选项的背景色变红,按完几次后所有的选项都变红了(用户不知道自己此刻选中的是哪个选项),所以每次键盘按下之前要将之前按下的效果清空。

最新回答 / 慕先生6741377
把全部代码发上来看看,暂时判断是onmouseover();这里出问题了,如果是要绑定事件的话语法错了,如果是调用函数的话最好函数名改一下,不要用关键字

已采纳回答 / weibo_不一样的烟火luck_0
background 单词拼错了

已采纳回答 / qq_会长大的幸福_4
as是个数组,也就是对象,不能确定到具体元素上,给一个对象设置背景色显然是不成立的,而as[i]已经具体到了某个变量,这个变量所表示的就是某个具体的元素,给某个元素设置背景色是合理的

已采纳回答 / 田心枫
window.onload是一个事件,当文档加载完成之后就会触发该事件,可以为此事件注册事件处理函数,并将要执行的脚本代码放在事件处理函数中,于是就可以避免获取不到对象的情况

最新回答 / 梨花夜雨酱
你第45行写错了,不是menu.length,而是as.length
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言