发表于: 2017-03-24 22:44:33

1 590


任务十五

今天完成的事情

  1. 1. 完善轮播图的响应式问题,解决方案是在每次宽度改变时,重新加载页面。
  2. window.onresize=function () {
    window.location.reload();
    }
  3. 但是这不是一个好的写法,在只是用js的情况下只能这样了,如果使用jquery和css3的话会简单点。
  4. 2.使用原生js和css3完成一个仿bootstrap的响应式导航栏,效果参见效果展示。

明天计划的事情

  1. 1.将组件运用到任务15。
  2. 2.开始js任务一。

遇到的问题

1.关于使用原生js实现响应式导航栏没有头绪,参考的是网上的代码(http://www.jb51.net/article/50252.htm),结果花了一上午终于全部读懂后才发现他的效果和bootstrap的效果不一样。他的菜单按钮会一直在最下面。如果要改的话,js部分基本要重写,他的动画效果实现的很有意思,是通过margintop来控制的,小屏幕时,让margintop为负值,此时菜单项的定位会更改为绝对定位,跑到屏幕外面。而我的菜单项并不是在屏幕顶部,上面还有一个div。所以要换一种思路,后来在网上查了一下折叠菜单的写法,发现实现方式大概是将子菜单绝对定位,被下方的其余菜单项覆盖,当点击当前菜单项时,给当前菜单项一个marrginbottom,撑出一片空白的空间,覆盖的子菜单展示出来。有了思路以后,写起来就简单多了。因为不想手写一个动画函数,所以用的是css3的动画属性。这是我写的一个无任何样式的导航组件的代码:

<body>
  <div class="container clearfix nav-wrap" id="nav-wrap">
     <div class="navbar-header clearfix" id="navbar-header">
        <button type="button" class="navbar-toggle" id="btn">
           <span>click</span>
        </button>
     </div>
     <div class="navbar-collapse" id="menu">
        <ul class="my-nav clearfix">
           <li>首页</li>
           <li>职业</li>
           <li>推荐</li>
           <li>关于</li>
        </ul>
     </div>
  </div>
<div class="main-wrap"></div>
</body>
<script>
  function $(id){
return document.getElementById(id);
}
function navToggle() {
var nav_wrap=$("nav-wrap");
var navbar=$("menu");
var btn=$("btn");
var nav_count=0;
btn.addEventListener("click",function () {
var menuHeight=navbar.offsetHeight;
if(nav_count===0){
nav_wrap.style.marginBottom=menuHeight+"px";
nav_count=1;
}
else{
nav_wrap.style.marginBottom=0;
nav_count=0;
}

},false);
}
window.onload=function () {
navToggle();
}
window.onresize=function () {
window.location.reload();
}
</script>
</html>

布局的代码

.clearfix:after,.clearfix:before {content: "."; display: block; height:0; clear:both; visibility: hidden;}
.clearfix { *zoom:1; }
*{
margin:0;
padding:0;
}
.container{
margin: 0 auto;
width: 100%;
max-width: 960px;
}
.nav-wrap{
position: relative;
line-height:36px;
text-align: center;
transition: margin-bottom 1s;
li{
list-style: none;
}
}
@media only screen and (min-width: 681px){
.navbar-header{
display: none;
}
.navbar-collapse{
float: right;
li{
float: left;
}
}

}
@media only screen and (max-width: 680px){
.navbar-toggle{
float: right;
}
.navbar-collapse{
position: absolute;
width: 100%;
z-index: -10;
}
}

div.main-wrap{
//opacity: 0;
 background-color: greenyellow;
width: 100%;
height: 200px;
}

最简单的写法是利用jquery的show方法,不过有一个问题是在li出现时,里面的文字是在左侧滑过来的。

  1. 收获

  1. 1学会了响应式导航栏的写法和思路。
  2. 2.了解了折叠菜单的实现方法。



返回列表 返回列表
评论

    分享到