切换菜单按钮单击菜单上的问题

时间:2019-12-14 13:15:53

标签: jquery

如果我将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="$(&quot;#menu-close&quot;).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 -->

0 个答案:

没有答案