【移动端】点击上面弹窗(源生JS)document.querySelector

效果图为:有一种缓缓从上到下出现的效果-webkit-transform:translateY(-100%);到-webkit-transform:translateY(0%)的转变!

THML代码为:

<header class="clr">
        <a class="fl logo" href="http://m.leiphone.com"><img src="http://m.leiphone.com/resMobile/images/logo.jpg" width="100" alt=""></a>
        <form method="GET" action="http://m.leiphone.com/search">
            <span class="down-arrow">
               <div class="down-menu">
                    <i class="l1"></i>
                    <i class="l2"></i>
                    <i class="l3"></i>
               </div>
            </span>
        </form>
</header>
<!--弹窗 start-->
<div class="navbar-container">
     <div class="nav-fix-container">
          <div class="navbar clr">
               <div class="nav-column">
                    <h4>雷锋旗下</h4>
                    <ul>
                        <li class="zhiqu"><a href="" target="_blank"><i class="lg icon"></i><span class="site">知趣网</span><i class="arrow icon"></i></a></li>
                        <li class="zhiqu"><a href="" target="_blank"><i class="lg icon"></i><span class="site">知趣网</span><i class="arrow icon"></i></a></li>
                        <li class="zhiqu"><a href="" target="_blank"><i class="lg icon"></i><span class="site">知趣网</span><i class="arrow icon"></i></a></li>
                        <li class="zhiqu"><a href="" target="_blank"><i class="lg icon"></i><span class="site">知趣网</span><i class="arrow icon"></i></a></li>
                    </ul>
               </div>
          </div>
     </div>
</div>
<div class="nav-overlay"></div>

<!--弹窗 end-->
View Code

CSS代码为:

.navbar .nav-column{background: rgba(255,255,255,1); padding: 0 3%; position: absolute; top: 0; z-index: 10; width: 100%; overflow: hidden;-webkit-transition:all .25s ease-out; transition:all .25s ease-out; -webkit-transform:translateY(-100%);transform:translateY(-100%);}
.navbar-show .nav-column{-webkit-transform:translateY(0%);transform:translateY(0%);}

JS代码为

var G={};
G.$=function(sel,context){
  return (context || document).querySelector(sel);
};
G.hasClass = function(o, c) {
    var regexp = new RegExp("(^|\\s+)" + c + '(\\s+|$)');
    return regexp.test(o.className);
};
G.addClass=function(o,c){
    !G.hasClass(o,c) && (o.className +=' ' + c);
};
G.removeClass = function(o, c) {
    o.className = o.className.replace(new RegExp("(^|\\s+)" + c + '(\\s+|$)'), ' ');
}
G.toggleClass = function(o, c) {
    G.hasClass(o, c) ? G.removeClass(o, c) : G.addClass(o, c);
};
G.transition = function(obj,time,prop,fx){
    var fx = fx || 'linear';
    var prop = prop || 'all';
    var prefix = ['','-o-','-ms-','-webkit-','-moz-'];
    for(var i = 0; i < prefix.length; i++){
        obj.style[prefix[i] + 'transition'] = time / 1000 + 's ' + prop + ' ' + fx;
    }
}

;({
    initialize:function(){
      this.navColumn();
    },
    navColumn:function(){
      var btn=document.querySelector('.down-arrow');
      var nav=document.querySelector('.nav-fix-container');
      var column=document.querySelector('.nav-column');
      var ov=document.querySelector('.nav-overlay');
      var columnHeight=column.offsetHeight;
      var before,timer;
      //var navOffsetTop=document.querySelector('.nav-container').offsetTop();
      var move_down=function(){
          clearTimeout(timer);

      };
      var ovshow=function(){
         ov.style.display='block';
         setTimeout(function(){
           G.transition(ov,250);
           ov.style.opacity=1;
         },10);
      };
      var ovhide=function(){
           ov.style.opacity=0;
           setTimeout(function(){
               ov.style.display='none';
           },250);
      }
      btn.addEventListener('click',function(event){
            if(G.hasClass(nav,'navbar-show')){
             G.removeClass(nav,'navbar-show');
             ovhide();
            }else{
                 G.addClass(nav,'navbar-show');
             ovshow();
          }
      },false);
      ov.addEventListener('click',function(){
           G.removeClass(nav,'navbar-show');
         ovhide();
      },false);
      document.addEventListener('touchmove',function(event){
        if(G.hasClass(nav,'navbar-show')){
            event.preventDefault();
        }
      },false);
    }
}).initialize();

本地效果交互文件为:app\1\plug\effup_down\demo.html

线上效果交互文件为:http://m.leiphone.com/

 

posted @ 2015-11-26 17:32  chenguiya  阅读(742)  评论(0)    收藏  举报