【问题标题】:How to make menu to slide form the right side in mobile device using HTML, CSS and JQuery?如何使用 HTML、CSS 和 JQuery 在移动设备中制作菜单以在右侧滑动?
【发布时间】:2017-01-16 06:03:05
【问题描述】:

单击菜单栏图标后,我必须使菜单从右侧滑动。我还必须滑动菜单栏图标。下面的代码是点击菜单栏后直接显示的菜单。单击菜单后,我必须顺利显示。我需要在移动设备上使用它。你会在这方面帮助我吗?

$(function() {
  var menuVisible = false;
  $('#menuBtn').click(function() {
    if (menuVisible) {
      $('#myMenu').css({
        'display': 'none'
      });
      menuVisible = false;
      return;
    }
    $('#myMenu').css({
      'display': 'block'
    });
    menuVisible = true;
  });
  $('#myMenu').click(function() {
    $(this).css({
      'display': 'none'
    });
    menuVisible = false;
  });
});
body {
  margin: 0;
  padding: 0;
  height: 100%;
}
.menu ul {
  list-style: none;
  float: right;
}
.menu li {
  float: left;
  margin: 10px;
}
.menu li a {
  text-decoration: none;
  color: #333;
  text-transform: uppercase;
}
.menu-bar {
  display: none;
}
@media only screen and (max-width: 768px) {
  .menu-bar {
    display: block;
    float: right;
    cursor: pointer;
    margin: 10px;
  }
  #myMenu {
    display: none;
    z-index: 999;
  }
  .menu ul {
    background-color: red;
    height: 100%;
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    padding: 0px;
    -webkit-box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
    -moz-box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
    box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
  }
  .menu ul li {
    float: none;
    border-bottom: 1px solid #fff;
    width: 100%;
    margin: 20px;
    text-align: left;
  }
  .menu li a {
    padding: 20px;
  }
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="menu">
  <div class="menu-bar">
    <span id="menuBtn"><i class="fa fa-bars" aria-hidden="true"></i></span>
  </div>
  <ul id="myMenu">
    <li><a href="">home</a>
    </li>
    <li><a href="">about</a>
    </li>
    <li><a href="">service</a>
    </li>
    <li><a href="">contact</a>
    </li>
  </ul>
</div>
<div style="position: relative;top: 50px;">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut neque dignissim, lobortis nulla sed, tristique urna. Pellentesque placerat, nunc eu feugiat tincidunt, lacus turpis dictum elit, non viverra elit metus at purus. Morbi eleifend
    dui velit, sit amet pretium odio lacinia eget. Nullam mattis massa in nibh laoreet euismod. Phasellus ullamcorper elit quis neque fermentum, at vehicula dolor posuere. Quisque gravida arcu a metus dignissim, vitae convallis ipsum vestibulum. Aliquam
    mollis magna non velit convallis, ut eleifend mauris pharetra. Phasellus ac ipsum pulvinar, dignissim lacus ut, dapibus purus. Integer volutpat ullamcorper magna quis vehicula. Maecenas rhoncus, turpis ac aliquam hendrerit, purus velit pellentesque
    tellus, vitae scelerisque metus leo vestibulum leo. Duis ac vulputate tortor. Aliquam at diam ullamcorper, finibus purus ac, dictum sem. Nulla quis dignissim orci. Donec vel purus eget elit feugiat auctor eget eget odio. Praesent volutpat purus in
    dui aliquam dignissim. Curabitur bibendum lorem id rutrum congue. Nulla urna diam, malesuada ac nibh consequat, auctor egestas ipsum. In non ipsum augue. Maecenas at velit tempus, pellentesque dui non, volutpat tellus. Duis ullamcorper lorem vel blandit
    scelerisque. Etiam venenatis est non urna volutpat, nec commodo neque condimentum. Maecenas sed tortor lacinia, viverra ligula vel, maximus ex. Aenean ut vestibulum lectus. Donec l</p>
</div>

【问题讨论】:

    标签: javascript jquery html css menu


    【解决方案1】:

    看看这个,用简单的 jQuery 完成

    $(function(){
    	$('#menuBtn').on('click', function(){
    		if( $(this).hasClass('right_margin') ){
    			$(this).removeClass('right_margin');
    			$('#myMenu').removeClass('active');
    		}else {
    			$(this).addClass('right_margin');
    			$('#myMenu').addClass('active');
    		}
    		
    		
    	});
      
    });
    body {
    	margin: 0;
    	padding: 0;
    	height: 100%;
    }
    .menu ul {
    	list-style: none;
    	float: right;
    }
    .menu li {
    	float: left;
    	margin: 10px;
    }
    .menu li a {
    	text-decoration: none;
    	color: #333;
    	text-transform: uppercase;
    }
    .menu-bar {
    	display: none;
    }
     @media only screen and (max-width: 768px) {
    .menu-bar {
    	display: block;
    	float: right;
    	cursor: pointer;
    	margin: 10px;
    	
    }
    #menuBtn {
    	transition-duration:1s;
    	-webkit-transition-duration:1s;
    	-ms-transition-duration:1s;
    	-moz-transition-duration:1s;
    }
    #myMenu {
    	z-index: 999;
    	transition-duration:1s;
    	-webkit-transition-duration:1s;
    	-ms-transition-duration:1s;
    	-moz-transition-duration:1s;
    }
    .menu ul {
    	background-color: red;
    	height: 100%;
    	position: fixed;
    	top: 0;
    	right: -300px;
    	bottom: 0;
    	padding: 0px;
    	-webkit-box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
    	-moz-box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
    	box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
    }
    .menu ul li {
    	float: none;
    	border-bottom: 1px solid #fff;
    	width: 100%;
    	margin: 20px;
    	text-align: left;
    }
    .menu li a {
    	padding: 20px;
    }
    .menu .active {
    	right:0;
    	transition-duration:1s;
    	-webkit-transition-duration:1s;
    	-ms-transition-duration:1s;
    	-moz-transition-duration:1s;
    }
    .right_margin {
    	margin-right:150px;
    	transition-duration:1s;
    	-webkit-transition-duration:1s;
    	-ms-transition-duration:1s;
    	-moz-transition-duration:1s;
    }
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
    <div class="menu">
      <div class="menu-bar"> <span id="menuBtn"><i class="fa fa-bars" aria-hidden="true"></i></span> </div>
      <ul id="myMenu">
        <li><a href="">home</a> </li>
        <li><a href="">about</a> </li>
        <li><a href="">service</a> </li>
        <li><a href="">contact</a> </li>
      </ul>
    </div>
    <div style="width:100%; float:left">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut neque dignissim, lobortis nulla sed, tristique urna. Pellentesque placerat, nunc eu feugiat tincidunt, lacus turpis dictum elit, non viverra elit metus at purus. Morbi eleifend
        dui velit, sit amet pretium odio lacinia eget. Nullam mattis massa in nibh laoreet euismod. Phasellus ullamcorper elit quis neque fermentum, at vehicula dolor posuere. Quisque gravida arcu a metus dignissim, vitae convallis ipsum vestibulum. Aliquam
        mollis magna non velit convallis, ut eleifend mauris pharetra. Phasellus ac ipsum pulvinar, dignissim lacus ut, dapibus purus. Integer volutpat ullamcorper magna quis vehicula. Maecenas rhoncus, turpis ac aliquam hendrerit, purus velit pellentesque
        tellus, vitae scelerisque metus leo vestibulum leo. Duis ac vulputate tortor. Aliquam at diam ullamcorper, finibus purus ac, dictum sem. Nulla quis dignissim orci. Donec vel purus eget elit feugiat auctor eget eget odio. Praesent volutpat purus in
        dui aliquam dignissim. Curabitur bibendum lorem id rutrum congue. Nulla urna diam, malesuada ac nibh consequat, auctor egestas ipsum. In non ipsum augue. Maecenas at velit tempus, pellentesque dui non, volutpat tellus. Duis ullamcorper lorem vel blandit
        scelerisque. Etiam venenatis est non urna volutpat, nec commodo neque condimentum. Maecenas sed tortor lacinia, viverra ligula vel, maximus ex. Aenean ut vestibulum lectus. Donec l</p>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

    【讨论】:

    • @Hybreeder 你检查了吗
    • 你也想移动菜单按钮,这就是为什么我在那里放了一个类,两个类都在切换
    • right_margin 添加到menuBtn &lt;span id="menuBtn" class="right_margin"&gt; 你不需要添加,它只会添加你点击menuBtn
    • 只需复制粘贴这段代码到一个简单的html页面,然后在浏览器上查看,您就可以了解发生了什么
    • 是的,它对我有用,但它也强制使用虚拟内容
    【解决方案2】:

    您可以使用jQueryUI slide effect。请参阅下面的工作示例:

        $(function() {
            var menuBtn = $('#menuBtn'), myMenu = $("#myMenu");
            menuBtn.click(function() {
                if ( $("#myMenu").is(":visible") ) {
                    menuBtn.removeClass("right_margin");
                    myMenu.toggle("slide", {direction: "right"}, 400);
                    
                    return;
                }
                menuBtn.addClass("right_margin");
                myMenu.toggle("slide", {direction: "right" }, 500);
            });
            
            myMenu.click(function (){
               menuBtn.trigger("click");
            });
        });
        body{
            margin: 0;
            padding: 0;
            height: 100%;
        }
        .menu ul
        {
        	list-style: none;
        	float: right;
        }
        .menu li{
        	float: left;
        	margin: 10px;
        }
        .menu li a{
        	text-decoration: none;
        	color: #333;
        	text-transform: uppercase;
        }
    
        .menu-bar
        {
        	display: none;
        }
    
        .right_margin{
          margin-right: 150px; 
          transition-duration:.5s;
          -webkit-transition-duration:.5s;
          -ms-transition-duration:.5s;
          -moz-transition-duration:.5s;
        }
    
        @media only screen and (max-width: 768px) {
    
        	.menu-bar
        	{
        		display: block;
        		float: right;
        		cursor: pointer;
        		margin: 10px;
        	}
        	#myMenu
        	{
        		display: none;
        		    z-index: 999;
        	}
        	.menu ul	{
        		background-color: red;
        		height: 100%;
        		position: fixed; 
            	top: 0;
            	right: 0;
            	bottom: 0;
            	padding: 0px;
            	 -webkit-box-shadow: 1px 1px 22px 0px rgba(50, 50, 50, 0.25);
        -moz-box-shadow:    1px 1px 22px 0px rgba(50, 50, 50, 0.25);
        box-shadow:         1px 1px 22px 0px rgba(50, 50, 50, 0.25);
        	}
    
        	.menu ul li
        	{
        		float: none;
        		border-bottom:1px solid #fff;
        		width: 100%; 
        		margin: 20px;
        		text-align: left;
        	}
        	.menu li a{
        		padding: 20px;
        	}
    
    
        }
    
       
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <div class="menu">
        <div class="menu-bar">
            <span id="menuBtn"><i class="fa fa-bars" aria-hidden="true"></i></span>
        </div>
        <ul id="myMenu">
            <li><a href="">home</a></li>
            <li><a href="">about</a></li>
            <li><a href="">service</a></li>
            <li><a href="">contact</a></li>
        </ul>
    </div>
    <div style="position: relative;top: 50px;">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut neque dignissim, lobortis nulla sed, tristique urna. Pellentesque placerat, nunc eu feugiat tincidunt, lacus turpis dictum elit, non viverra elit metus at purus. Morbi eleifend dui velit, sit amet pretium odio lacinia eget. Nullam mattis massa in nibh laoreet euismod. Phasellus ullamcorper elit quis neque fermentum, at vehicula dolor posuere. Quisque gravida arcu a metus dignissim, vitae convallis ipsum vestibulum. Aliquam mollis magna non velit convallis, ut eleifend mauris pharetra. Phasellus ac ipsum pulvinar, dignissim lacus ut, dapibus purus.
    
        Integer volutpat ullamcorper magna quis vehicula. Maecenas rhoncus, turpis ac aliquam hendrerit, purus velit pellentesque tellus, vitae scelerisque metus leo vestibulum leo. Duis ac vulputate tortor. Aliquam at diam ullamcorper, finibus purus ac, dictum sem. Nulla quis dignissim orci. Donec vel purus eget elit feugiat auctor eget eget odio. Praesent volutpat purus in dui aliquam dignissim. Curabitur bibendum lorem id rutrum congue. Nulla urna diam, malesuada ac nibh consequat, auctor egestas ipsum. In non ipsum augue. Maecenas at velit tempus, pellentesque dui non, volutpat tellus. Duis ullamcorper lorem vel blandit scelerisque. Etiam venenatis est non urna volutpat, nec commodo neque condimentum. Maecenas sed tortor lacinia, viverra ligula vel, maximus ex. Aenean ut vestibulum lectus.
    
        Donec l</p>
    </div>

    【讨论】:

    • 感谢德克斯特先生的回复。我 95% 的问题得到了解决。还有 5% 是你能帮我在菜单上设置那个菜单栏图标吗?这样,如果任何用户单击菜单栏图标,该图标也会滑动。现在菜单栏图标显示在菜单后面。
    • 我还必须显示菜单图标栏。现在显示在菜单后面。
    • @Hybreeder 我更新了我的答案并使用了@naila 的.right_margin css 类来获得您正在寻找的功能。因为@naila 的答案好多了。现在由您决定最适合您的方法。
    • 感谢您的帮助 Mr.dexterb。从我这边投票。
    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2012-08-09
    • 2020-02-15
    • 2022-07-20
    • 1970-01-01
    相关资源
    最近更新 更多