老师,为什么我的下拉菜单不显示呢?
程序没有报错,就是鼠标移到文字上不显示下拉菜单,如下图所示。
前面的章节跟着视频,都没有问题,问题出在3-1这里。
我的程序目录如下:
index.html如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> <head> <title>3-1-dropDown</title> <meta charset="UTF-8"> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <link type="text/css" rel="stylesheet" href="css/reset.css"> <link type="text/css" rel="stylesheet" href="css/public.css"> <link type="text/css" rel="stylesheet" href="css/index.css"> </head> <body> <!-- 顶部 --> <div class="topPart"> <div class="top__wrap wrap"> <!-- 顶部左边部分 --> <ol class="top__wrap__left"> <!-- 请登录 --> <li class="top__wrap__left__li"><a href="javascript:;" class="top__wrap__left__li__login">亲,请登录</a></li> <!-- 免费注册 --> <li class="top__wrap__left__li"><a href="javascript:;" class="top__wrap__left__li__signUp link">免费注册</a></li> <!-- 手机慕淘 --> <li class="top__wrap__left__li"><a href="javascript:;" class="top__wrap__left__li__app link">手机慕淘</a></li> </ol> <!-- 顶部右边部分 --> <ol class="top__wrap__right"> <!-- “我的慕淘” --> <li class="top__wrap__right__li top dropDown" data-on="top"> <a href="javascript:;" class="top__wrap__right__li__dropDown-toggle dropDown-toggle link">我的慕淘<i class="dropDown-arrow"></i></a> <!-- “我的慕淘”下拉列表 --> <ol class="top__wrap__right__li__dropDown-layer dropDown-layer dropDown-left"> <li class="top-item"><a href="javascript:;">已买到的宝贝</a></li> <li class="top-item"><a href="javascript:;">我的足迹</a></li> </ol> </li> <!-- “收藏夹” --> <li class="top__wrap__right__li top dropDown" data-on="top"> <a href="javascript:;" class="top__wrap__right__li__dropDown-toggle dropDown-toggle link">收藏夹<i class="dropDown-arrow"></i></a> <!-- “收藏夹”下拉列表 --> <ol class="top__wrap__right__li__dropDown-layer dropDown-layer dropDown-left"> <li class="top-item"><a href="javascript:;">收藏的宝贝</a></li> <li class="top-item"><a href="javascript:;">收藏的店铺</a></li> </ol> </li> <!-- “商品分类” --> <li class="top__wrap__right__li"><a href="javascript:;" class="top__wrap__right__li__category link">商品分类</a></li> <!-- “卖家中心” --> <li class="top__wrap__right__li top dropDown" data-on="top"> <a href="javascript:;" class="top__wrap__right__li__dropDown-toggle dropDown-toggle link">卖家中心<i class="dropDown-arrow"></i></a> <!-- “卖家中心”下拉列表 --> <ol class="top__wrap__right__li__dropDown-layer dropDown-layer dropDown-left"> <li class="top-item"><a href="javascript:;">免费开店</a></li> <li class="top-item"><a href="javascript:;">已卖出的宝贝</a></li> <li class="top-item"><a href="javascript:;">出售中的宝贝</a></li> <li class="top-item"><a href="javascript:;">卖家服务市场</a></li> <li class="top-item"><a href="javascript:;">卖家培训中心</a></li> <li class="top-item"><a href="javascript:;">体验中心</a></li> </ol> </li> <!-- “联系客服” --> <li class="top__wrap__right__li top dropDown" data-on="top"> <a href="javascript:;" class="top__wrap__right__li__dropDown-toggle dropDown-toggle link">联系客服<i class="dropDown-arrow"></i></a> <!-- “联系客服”下拉列表 --> <ol class="top__wrap__right__li__dropDown-layer dropDown-layer dropDown-left"> <li class="top-item"><a href="javascript:;">买家客服</a></li> <li class="top-item"><a href="javascript:;">卖家客服</a></li> </ol> </li> </ol> </div> </div> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.min.js"></script> <script type="text/javascript"> window.jQuery || document.write('<script src="js/jquery-1.12.4.min.js"><\/script>'); </script> <script type="text/javascript" src="js/index.js"></script> <script type="text/javascript" src="js/transition.js"></script> <script type="text/javascript" src="js/showHide.js"></script> <script type="text/javascript" src="js/dropDown.js"></script> </body> </html>
index.css如下:
/**************** 顶部top基本样式 开始 ****************/ /*顶部*/ .topPart { width: 100%; font-size: 12px; background-color: #F3F5F7; } /*顶部*/ .top__wrap { height: 44px; line-height: 44px; border-bottom: 1px solid #CDD0D4; } /*顶部左边部分*/ .top__wrap__left, .top__wrap__left__li { float: left; } /*请登录*/ .top__wrap__left__li__login { margin-left: 15px; color: #F01414; } /*免费注册、手机慕淘*/ .top__wrap__left__li__signUp, .top__wrap__left__li__app { margin-left: 15px; } /*顶部右边部分*/ .top__wrap__right { float: right; } /*顶部右边部分*/ .top__wrap__right__li { float: left; } /*商品分类*/ .top__wrap__right__li__category { margin: 0 10px; } /*联系客服*/ .top__wrap__right__li:last-child > a { margin-right: 15px; } /**************** 顶部top基本样式 结束 ****************/ /**************** 顶部top的下拉菜单样式 开始 ****************/ /*我的慕淘*/ .top .dropDown-toggle { display: inline-block; padding: 0 24px 0 12px; height: 100%; border-left: 1px solid #F3F5F7; border-right: 1px solid #F3F5F7; } /*下拉箭头*/ .top .dropDown-arrow { top: 20px; right: 8px; border-width: 5px; border-style: solid; border-color: #4D555D transparent transparent transparent; width: 0; height: 0; -o-transition: all .2s; -ms-transition: all .2s; -moz-transition: all .2s; -webkit-transition: all .2s; transition: all .2s; } /*下拉层*/ .top .dropDown-layer { top: 44px; border: 1px solid #CDD0D4; border-top-style: none; background-color: #FFF; } /*下拉列表项*/ .top .top-item { display: block; padding: 0 8px; height: 30px; line-height: 30px; white-space: nowrap; color: #4D555D; } /*下拉列表项*/ .top .top-item > a { color: #4D555D; } .top .top-item:hover { background-color: #F3F5F7; } /*我的慕淘*/ .top-on .dropDown-toggle { border-color: #CDD0D4; background-color: #FFF; } /*下拉箭头*/ .top-on .dropDown-arrow { border-top-color: #F01414; top: 14px; -o-transform: rotate(180deg); -ms-transform: rotate(180deg); -moz-transform: rotate(180deg); -webkit-transform: rotate(180deg); transform: rotate(180deg); } /**************** 顶部top的下拉菜单样式 结束 ****************/
public.css如下:
/* 公共样式 */ /*定宽样式*/ .wrap { margin: 0 auto; width: 1200px; min-width: 1200px; } /*超链接样式*/ .link { color: #4D555D; } /*超链接样式*/ .link:hover { color: #F01414; } /**************** 下拉菜单dropDown基础样式 开始 ****************/ /*下拉菜单*/ .dropDown { position: relative; } /*切换文字*/ .dropDown-toggle { position: relative; z-index: 1; } /*下拉箭头*/ .dropDown-arrow { position: absolute; } /*下拉层,默认隐藏*/ .dropDown-layer { display: none; position: absolute; z-index: 1; } /*下拉层左对齐*/ .dropDown-left { left: 0; right: auto; } /*下拉层右对齐*/ .dropDown-right { right: 0; left: auto; } /**************** 下拉菜单dropDown基础样式 结束 ****************/ /* 动画时间 */ .transition { -o-transition: all .5s; -ms-transition: all .5s; -moz-transition: all .5s; -webkit-transition: all .5s; transition: all .5s; } /*淡出效果*/ .fadeOut { opacity: 0 !important; visibility: hidden !important; } /* 上下滑动隐藏 */ .slideUpDownCollapse { height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; } /* 左右滑动隐藏 */ .slideLeftRightCollapse { width: 0 !important; padding-left: 0 !important; padding-right: 0 !important; }
reset.css如下:
/* 重置样式 */ html, body, div, span, h1, h2, h3, h4, h5, h6, p, pre, a, address, big, cite, code, em, img, ins, samp, b, u, i, small, strike, strong, sub, sup, tt, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, thead, tbody, tfoot, tr, th, td, article, aside, details, figure, figcaption, footer, header, hgroup, menu, nav, output, section, summary, time, mark, audio, video { margin: 0; padding: 0; } body { font-family: "微软雅黑 Microsoft YaHei"; font-size: 16px; color: #000; background-color: #FFF; } li { list-style-type: none; } a { text-decoration-line: none; }
dropDown.js如下:
"use strict"; // 下拉菜单模块 (function($) { // 定义局部函数dropDown let dropDown = function(ele) { let $ele = $(ele), // 转换为Jquery对象 $layer = $ele.find("dropdown-layer"), onClass = $ele.attr("data-on") + "-on"; // 获取on状态的class $layer.showHide({ css: true, js: true, animation: "fade", }); $ele.hover( function() { $(this).addClass(onClass); // 鼠标移入时添加class $layer.showHide("show"); }, function() { $(this).removeClass(onClass); // 鼠标移出时删除class $layer.showHide("hide"); }); }; $.fn.dropDown = function() { // 执行局部函数dropDown return $(this).each(function() { dropDown($(this)); }); }; })(jQuery);
index.js如下:
$().ready(function() { // 下拉菜单模块 $(".dropDown").dropDown(); });
showHide.js如下:
(function($) { "use strict"; /**************************** module 1: start ****************************/ let silentAnimation = { // 初始化 init: function($ele) { init($ele); console.log("silentAnimation init"); }, // 显示 show: function($ele) { show($ele, function() { // 调用jQuery的show方法 $ele.show(); // 触发自定义的shown事件,设置状态为shown $ele.trigger("shown").data("status", "shown"); }); console.log("silentAnimation show"); }, // 隐藏 hide: function($ele) { hide($ele, function() { // 调用jQuery的hide方法 $ele.hide(); // 触发自定义的hidden事件,设置状态为hidden $ele.trigger("hidden").data("status", "hidden"); }); console.log("silentAnimation hide"); }, }; /**************************** module 1: end ****************************/ /**************************** module 2: start ****************************/ let cssAnimation = { _init: function($ele, classname) { $ele.addClass("transition"); init($ele, function() { $ele.addClass(classname); }); }, _show: function($ele, classname) { show($ele, function() { // 动画结束后,触发自定义的shown事件,设置状态为shown $ele.off(window.MUTAO.transitionend).one(window.MUTAO.transitionend, function() { $ele.trigger("shown").data("status", "shown"); }); // 先显示 $ele.show(); // 后动画过渡 setTimeout(function() { $ele.removeClass(classname); }); }); }, _hide: function($ele, classname) { hide($ele, function() { // 然后在动画结束后,隐藏 $ele.off(window.MUTAO.transitionend).one(window.MUTAO.transitionend, function() { $ele.hide(); // 触发自定义的hidden事件,设置状态为hidden $ele.trigger("hidden").data("status", "hidden"); }); // 先动画过渡 $ele.addClass(classname); }); }, // 淡入淡出效果 fade: { // 初始化 init: function($ele) { cssAnimation._init($ele, "fadeOut"); console.log("cssAnimation.fade init"); }, // 淡入 show: function($ele) { cssAnimation._show($ele, "fadeOut"); console.log("cssAnimation.fade show"); }, // 淡出 hide: function($ele) { cssAnimation._hide($ele, "fadeOut"); console.log("cssAnimation.fade hide"); }, }, // 上下滑动效果 slideUpDown: { // 初始化 init: function($ele) { // 设置高度 $ele.height($ele.height()); cssAnimation._init($ele, "slideUpDownCollapse"); console.log("cssAnimation.slideUpDown init"); }, // 上下滑动显示 show: function($ele) { cssAnimation._show($ele, "slideUpDownCollapse"); console.log("cssAnimation.slideUpDown show"); }, // 上下滑动隐藏 hide: function($ele) { cssAnimation._hide($ele, "slideUpDownCollapse"); console.log("cssAnimation.slideUpDown hide"); }, }, // 左右滑动效果 slideLeftRight: { // 初始化 init: function($ele) { // 设置宽度 $ele.width($ele.width()); cssAnimation._init($ele, "slideLeftRightCollapse"); console.log("cssAnimation.slideLeftRight init"); }, // 左右滑动显示 show: function($ele) { cssAnimation._show($ele, "slideLeftRightCollapse"); console.log("cssAnimation.slideLeftRight show"); }, // 左右滑动隐藏 hide: function($ele) { cssAnimation._hide($ele, "slideLeftRightCollapse"); console.log("cssAnimation.slideLeftRight hide"); }, }, // 淡入淡出+上下滑动效果 fadeSlideUpDown: { // 初始化 init: function($ele) { // 设置高度 $ele.height($ele.height()); cssAnimation._init($ele, "fadeOut slideUpDownCollapse"); console.log("cssAnimation.fadeSlideUpDown init"); }, // 上下滑动显示 show: function($ele) { cssAnimation._show($ele, "fadeOut slideUpDownCollapse"); console.log("cssAnimation.fadeSlideUpDown show"); }, // 上下滑动隐藏 hide: function($ele) { cssAnimation._hide($ele, "fadeOut slideUpDownCollapse"); console.log("cssAnimation.fadeSlideUpDown hide"); }, }, // 淡入淡出+左右滑动效果 fadeSlideLeftRight: { // 初始化 init: function($ele) { // 设置宽度 $ele.width($ele.width()); cssAnimation._init($ele, "fadeOut slideLeftRightCollapse"); console.log("cssAnimation.fadeSlideLeftRight init"); }, // 左右滑动显示 show: function($ele) { cssAnimation._show($ele, "fadeOut slideLeftRightCollapse"); console.log("cssAnimation.fadeSlideLeftRight show"); }, // 左右滑动隐藏 hide: function($ele) { cssAnimation._hide($ele, "fadeOut slideLeftRightCollapse"); console.log("cssAnimation.fadeSlideLeftRight hide"); }, }, }; /**************************** module 2: end ****************************/ /**************************** module 3: start ****************************/ let jsAnimation = { _init: function($ele, callback) { $ele.removeClass("transition"); init($ele, callback); }, _show: function($ele, method) { show($ele, function() { $ele.stop()[method](function() { // 触发自定义shown事件,设置status状态 $ele.trigger("shown").data("status", "shown"); }); }); }, _hide: function($ele, method) { hide($ele, function() { $ele.stop()[method](function() { // 触发自定义hidden事件,设置status状态 $ele.trigger("hidden").data("status", "hidden"); }); }); }, _cusInit: function($ele, oProperty) { let styles = {}; for (let i in oProperty) { styles[i] = $ele.css(i); } // 保存元素的宽度信息 $ele.data("styles", styles); jsAnimation._init($ele, function() { $ele.css(oProperty); }); }, _cusShow: function($ele) { show($ele, function() { $ele.show(); $ele.stop().animate($ele.data("styles"), function() { // 动画结束后,触发shown事件,设置status状态 $ele.trigger("shown").data("status", "shown"); }); }); }, _cusHide: function($ele, oProperty) { hide($ele, function() { $ele.stop().animate(oProperty, function() { $ele.hide(); // 动画结束后,触发hidden事件,设置status状态 $ele.trigger("hidden").data("status", "hidden"); }); }); }, // 淡入淡出效果 fade: { // 初始化 init: function($ele) { jsAnimation._init($ele); console.log("jsAnimation.fade init"); }, // 淡入 show: function($ele) { jsAnimation._show($ele, "fadeIn"); console.log("jsAnimation.fade show"); }, // 淡出 hide: function($ele) { jsAnimation._hide($ele, "fadeOut"); console.log("jsAnimation.fade hide"); }, }, // 上下滑动效果 slideUpDown: { // 初始化 init: function($ele) { jsAnimation._init($ele); console.log("jsAnimation.slideUpDown init"); }, // 下滑显示 show: function($ele) { jsAnimation._show($ele, "slideDown"); console.log("jsAnimation.slideUpDown show"); }, // 上滑隐藏 hide: function($ele) { jsAnimation._hide($ele, "slideUp"); console.log("jsAnimation.slideUpDown hide"); }, }, // 左右滑动效果 slideLeftRight: { // 初始化 init: function($ele) { jsAnimation._cusInit($ele, { "width": 0, "padding-left": 0, "padding-right": 0, }); console.log("jsAnimation.slideLeftRight init"); }, // 显示 show: function($ele) { jsAnimation._cusShow($ele); console.log("jsAnimation.slideLeftRight show"); }, // 隐藏 hide: function($ele) { jsAnimation._cusHide($ele, { "width": 0, "padding-left": 0, "padding-right": 0, }); console.log("jsAnimation.slideLeftRight hide"); }, }, // 淡入淡出+上下滑动 fadeSlideUpDown: { // 初始化 init: function($ele) { jsAnimation._cusInit($ele, { "opacity": 0, "height": 0, "padding-top": 0, "padding-bottom": 0, }); console.log("jsAnimation.fadeSlideUpDown init"); }, // 显示 show: function($ele) { jsAnimation._cusShow($ele); console.log("jsAnimation.fadeSlideUpDown show"); }, // 隐藏 hide: function($ele) { jsAnimation._cusHide($ele, { "opacity": 0, "height": 0, "padding-top": 0, "padding-bottom": 0, }); console.log("jsAnimation.fadeSlideUpDown hide"); }, }, // 淡入淡出+左右滑动 fadeSlideLeftRight: { // 初始化 init: function($ele) { jsAnimation._cusInit($ele, { "opacity": 0, "width": 0, "padding-left": 0, "padding-right": 0, }); console.log("jsAnimation.fadeSlideLeftRight init"); }, // 显示 show: function($ele) { jsAnimation._cusShow($ele); console.log("jsAnimation.fadeSlideLeftRight show"); }, // 隐藏 hide: function($ele) { jsAnimation._cusHide($ele, { "opacity": 0, "width": 0, "padding-left": 0, "padding-right": 0, }); console.log("jsAnimation.fadeSlideLeftRight hide"); }, }, }; /**************************** module 3: end ****************************/ /**************************** module 4: start ****************************/ function init($ele, hiddenCallback) { if ($ele.is(":hidden") || $ele.css("visibility") === "hidden") { $ele.data("status", "hidden"); typeof hiddenCallback === "function" ? hiddenCallback() : 1; } else { $ele.data("status", "shown"); } } function show($ele, callback) { // 若已显示,则返回 if ($ele.data("status") === "show" || $ele.data("status") === "shown") { return; } // 触发自定义的show事件,设置状态为show $ele.trigger("show").data("status", "show"); callback(); } function hide($ele, callback) { // 若已隐藏,则返回 if ($ele.data("status") === "hide" || $ele.data("status") === "hidden") { return; } // 触发自定义的hide事件,设置状态为hide $ele.trigger("hide").data("status", "hide"); callback(); } /**************************** module 4: end ****************************/ /**************************** module 5: start ****************************/ let defaults = {css: false, js: false, animation: "fade"}; function showHide($ele, options) { let mode = null; // 使用CSS动画 if (options.css && MUTAO.isSupported) { mode = cssAnimation[options.animation] || cssAnimation[defaults.animation]; } // 使用JS动画 else if (options.js) { mode = jsAnimation[options.animation] || jsAnimation[defaults.animation]; } // 不使用动画 else { mode = silentAnimation; } mode.init($ele); return { show: $.proxy(mode.show, this, $ele), hide: $.proxy(mode.hide, this, $ele), }; } $.fn.extend({ showHide: function(args) { return this.each(function() { let $this = $(this), mode = $this.data("showHide"), options = $.extend({}, defaults, typeof args === "object" && args); if (!mode) { $this.data("showHide", mode = showHide($this, options)); } (typeof mode[args]) === "function" ? mode[args]() : 1; }); }, }); /**************************** module 5: end ****************************/ })(jQuery);
transition.js如下:
/** * 解决transitionend事件的兼容性问题 * **/ // console.log(document.body.style.transition); (function() { // transitionend事件名 let transitionendEvent = { transition: "transitionend", MozTransition: "transitionend", WebkitTransition: "webkitTransitionEnd", OTransition: "oTransitionEnd otransitionend", }; let transitionend = "", isSupported = false; for (let i in transitionendEvent) { if (document.body.style[i] !== undefined) { transitionend = transitionendEvent[i]; isSupported = true; break; } } // 全局变量MUTAO window.MUTAO = window.MUTAO || {}; window.MUTAO = { transitionend: transitionend, isSupported: isSupported, }; })();
20
收起
正在回答
2回答
同学你好,因为获取元素的类名书写有误,所以没有实现淡入淡出的效果。建议修改:
修改后的效果如下:
因为同学题目描述的是为什么下拉菜单不显示,所以老师会针对如何显示下拉菜单,给出最简单的解决方法。
非常抱歉给同学造成了觉得老师敷衍的感觉,其实同学提问的每一个问题,老师们都非常认真的做出解答,老师就是抱着帮助同学解决问题的心态进行答疑的,希望同学能够理解一下, 以后提问时,可以描述的再稍微详细一点,例如:为什么下拉菜单无法显示,设置的淡入淡出效果没有实现。 只有老师和同学之间相互配合,才能准确高效的帮助同学解决问题。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星