如果我将span标签放在主div标签内,则下面的代码可以很好地工作。但是,当我将其删除并放置在div标签之外并对脚本进行更改时,菜单未显示。我想让div标签位于div标签之外。此外,该脚本将toggle类添加到span标签,但不显示菜单。我能知道我在哪里做错了吗?
;( function( $, window, undefined ) {
'use strict';
// global
var Modernizr = window.Modernizr, $body = $( 'body' );
$.DLMenu = function( options, element ) {
this.$el = $( element );
this._init( options );
};
// the options
$.DLMenu.defaults = {
// classes for the animation effects
animationClasses : { classin : 'dl-animate-in-1', classout : 'dl-animate-out-1' },
// callback: click a link that has a sub menu
// el is the link element (li); name is the level name
onLevelClick : function( el, name ) { return false; },
// callback: click a link that does not have a sub menu
// el is the link element (li); ev is the event obj
onLinkClick : function( el, ev ) { return false; }
};
$.DLMenu.prototype = {
_init : function( options ) {
// options
this.options = $.extend( true, {}, $.DLMenu.defaults, options );
// cache some elements and initialize some variables
this._config();
var animEndEventNames = {
'WebkitAnimation' : 'webkitAnimationEnd',
'OAnimation' : 'oAnimationEnd',
'msAnimation' : 'MSAnimationEnd',
'animation' : 'animationend'
},
transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
};
// animation end event name
this.animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ] + '.dlmenu';
// transition end event name
this.transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ] + '.dlmenu',
// support for css animations and css transitions
this.supportAnimations = Modernizr.cssanimations,
this.supportTransitions = Modernizr.csstransitions;
this._initEvents();
},
_config : function() {
this.open = false;
this.$trigger = $( '.dl-trigger' );
this.$menu = this.$el.children( 'ul.dl-menu' );
this.$menuitems = this.$menu.find( 'li:not(.dl-back)' );
this.$el.find( 'ul.dl-submenu' ).prepend( '<li class="dl-back" style="border-bottom: 2px solid white; padding-bottom: 25px; color:white;cursor:pointer;">Back</a></li>' );
this.$back = this.$menu.find( 'li.dl-back' );
},
_initEvents : function() {
var self = this;
this.$trigger.on( 'click.dlmenu', function() {
if( self.open ) {
self._closeMenu();
}
else {
self._openMenu();
}
return false;
} );
this.$menuitems.on( 'click.dlmenu', function( event ) {
event.stopPropagation();
var $item = $(this),
$submenu = $item.children( 'ul.dl-submenu' );
if( $submenu.length > 0 ) {
var $flyin = $submenu.clone().css( 'opacity', 0 ).insertAfter( self.$menu ),
onAnimationEndFn = function() {
self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classout ).addClass( 'dl-subview' );
$item.addClass( 'dl-subviewopen' ).parents( '.dl-subviewopen:first' ).removeClass( 'dl-subviewopen' ).addClass( 'dl-subview' );
$flyin.remove();
};
setTimeout( function() {
$flyin.addClass( self.options.animationClasses.classin );
self.$menu.addClass( self.options.animationClasses.classout );
if( self.supportAnimations ) {
self.$menu.on( self.animEndEventName, onAnimationEndFn );
}
else {
onAnimationEndFn.call();
}
self.options.onLevelClick( $item, $item.children( 'a:first' ).text() );
} );
return false;
}
else {
self.options.onLinkClick( $item, event );
}
} );
this.$back.on( 'click.dlmenu', function( event ) {
var $this = $( this ),
$submenu = $this.parents( 'ul.dl-submenu:first' ),
$item = $submenu.parent(),
$flyin = $submenu.clone().insertAfter( self.$menu );
var onAnimationEndFn = function() {
self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classin );
$flyin.remove();
};
setTimeout( function() {
$flyin.addClass( self.options.animationClasses.classout );
self.$menu.addClass( self.options.animationClasses.classin );
if( self.supportAnimations ) {
self.$menu.on( self.animEndEventName, onAnimationEndFn );
}
else {
onAnimationEndFn.call();
}
$item.removeClass( 'dl-subviewopen' );
var $subview = $this.parents( '.dl-subview:first' );
if( $subview.is( 'li' ) ) {
$subview.addClass( 'dl-subviewopen' );
}
$subview.removeClass( 'dl-subview' );
} );
return false;
} );
},
closeMenu : function() {
if( this.open ) {
this._closeMenu();
}
},
_closeMenu : function() {
var self = this,
onTransitionEndFn = function() {
self.$menu.off( self.transEndEventName );
self._resetMenu();
};
this.$menu.removeClass( 'dl-menuopen' );
this.$menu.addClass( 'dl-menu-toggle' );
this.$trigger.removeClass( 'dl-active' );
if( this.supportTransitions ) {
this.$menu.on( this.transEndEventName, onTransitionEndFn );
}
else {
onTransitionEndFn.call();
}
this.open = false;
},
openMenu : function() {
if( !this.open ) {
this._openMenu();
}
},
_openMenu : function() {
var self = this;
// clicking somewhere else makes the menu close
$body.off( 'click' ).on( 'click.dlmenu', function() {
self._closeMenu() ;
} );
this.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( this.transEndEventName, function() {
$( this ).removeClass( 'dl-menu-toggle' );
} );
this.$trigger.addClass( 'dl-active' );
this.open = true;
},
// resets the menu to its original state (first level of options)
_resetMenu : function() {
this.$menu.removeClass( 'dl-subview' );
this.$menuitems.removeClass( 'dl-subview dl-subviewopen' );
}
};
var logError = function( message ) {
if ( window.console ) {
window.console.error( message );
}
};
$.fn.dlmenu = function( options ) {
if ( typeof options === 'string' ) {
var args = Array.prototype.slice.call( arguments, 1 );
this.each(function() {
var instance = $.data( this, 'dlmenu' );
if ( !instance ) {
logError( "cannot call methods on dlmenu prior to initialization; " +
"attempted to call method '" + options + "'" );
return;
}
if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
logError( "no such method '" + options + "' for dlmenu instance" );
return;
}
instance[ options ].apply( instance, args );
});
}
else {
this.each(function() {
var instance = $.data( this, 'dlmenu' );
if ( instance ) {
instance._init();
}
else {
instance = $.data( this, 'dlmenu', new $.DLMenu( options, this ) );
}
});
}
return this;
};
} )( jQuery, window );
.dl-menuwrapper {
width: 100%;
max-width: 300px;
float: left;
position: fixed;
-webkit-perspective: 1000px;
perspective: 1000px;
-webkit-perspective-origin: 50% 200%;
perspective-origin: 50% 200%;
z-index: 999;
height: 100%;
font-family: sans-serif;
}
.dl-menuwrapper:first-child {
margin-right: 100px;
}
.dl-menuwrapper ul {
background: #1c1d22 !important;
}
.dl-trigger i{
width: 40px;
height: 40px;
line-height: 40px;
font-size: 25px;
text-align: center;
background-color: #313131;
cursor: pointer;
color: #ffffff;
}
.dl-trigger {
position: absolute;
top: 10px;
right: 10px;
transition: .1s;
z-index: 9999;
}
.dl-trigger.sticky {
position: fixed;
width: 161%;
top: -60px;
right: -184px;
text-align: right;
padding: 10px 10px 10px 0;
background-color: #e4eaee;
border-radius: 0;
z-index: 0;
}
.dl-trigger.sticky::before {
content: "";
position: absolute;
width: 130px;
height: 30px;
left: 0;
right: 0;
top: 50%;
margin: -15px auto 0;
background: url(../images/logo-m.png) no-repeat;
}
.dl-menuwrapper ul {
padding: 0;
list-style: none;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.dl-menuwrapper .dl-menu {
margin: 5px 0 0 0;
position: absolute;
width: 100%;
top: -63px;
opacity: 0;
pointer-events: none;
-webkit-transform: translateY(10px);
transform: translateY(10px);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.dl-menuwrapper .dl-menu.dl-menu-toggle {
transition: all 0.3s ease;
}
.dl-menuwrapper .dl-menu.dl-menuopen {
opacity: 1;
pointer-events: auto;
-webkit-transform: translateY(0px);
transform: translateY(0px);
height:100%;
}
<span class="dl-trigger navbar visible-xs visible-sm visible-md" style="margin-top: 0px;"><i class="fa fa-bars" aria-hidden="true"></i></span>
<div id="dl-menu" class="dl-menuwrapper">
<ul class="dl-menu">
<li class="logo-item">
<img src="assets/images/logo_2.png" style="position: absolute;left: 60px;top: 20px;" alt="image" onclick="$("#menu-close").click();">
</li>
<li class="other-items">
<a href="#">Home <span class="glyphicon glyphicon-home change"></span></a>
</li>
<li class="other-items">
<a href="#">about us<span style="left: 98px;" class="glyphicon glyphicon-question-sign change" aria-hidden="true"></span></a>
</li>
<li class="other-items">
<a href="#">Our Services<span style="left: 84px;" id="service_icon" class="glyphicon glyphicon-cog change" aria-hidden="true"></span></a>
<ul class="dl-submenu" id="style-1">
<li><a href="#">Writing</a></li>
<li><a href="#">Creation</a></li>
<li><a href="#">Editing</a></li>
<li><a href="#">Growth Management</a></li>
<li><a href="#">Media Postings</a></li>
<li><a href="#">Creation</a></li>
<li><a href="#">Website </a></li>
<li><a href="#">Some services</a></li>
<li><a href="#">Brand Identity</a></li>
</ul>
</li>
<li class="other-items">
<a href="#">Our Art Work <span style="left: 82px;" class="glyphicon glyphicon-picture change"></span></a>
</li>
<li class="other-items">
<a href="#">Contact <span style="left: 100px;" class="glyphicon glyphicon-user change"></span></a>
</li>
<li class="signin-item" style="top: 115px;">
<button onclick="window.open('')" class="download-button" type="submit"><span>Sign in</span></button>
</li>
</ul>
</div><!-- /dl-menuwrapper -->