2014-04-03 67 views
1

我打算在窗口大小调整时动态更改div的高度。使用jQuery计算div窗口的高度resize使用jQuery

当我在包装jQuery的功能如$(window).smartresize(function() { }时,我很成功,但是,这打破了功能的另一个领域。

HMTL

<section id="menu"> 

    <div class="menu-container"> 

     <ul class="menu__nav"> 
      <!-- menu nav --> 
     </ul> 

     <div class="menu__main"> 
      <!-- content --> 
     </div> 

     <div class="menu__main"> 
      <!-- content --> 
     </div> 

     <div class="menu__main"> 
      <!-- content --> 
     </div> 

    </div> 

</section> 

jQuery的

(function($) { 

    $(document).ready(function() { 

     var $mmenu = $('.menu__main'); 

     if ($mmenu.length > 0) { 

      var $mnav = $('.menu__nav'), 
       $mnav_a = $mnav.find('a'), 
       m = parseInt($mnav.outerHeight(true), 10), 
       $contain = $mmenu.closest('.menu-container'), 
       h = 0, 
       l = 0; 

      $mmenu.not(':eq(0)').hide(); 
      $mmenu.eq(0).addClass('active'); 
      $mnav_a.eq(0).addClass('active'); 

      $mmenu.each(function(z) { 

       var $this = $(this); 

       $this.css('height','auto'); 

       $this.css({ 
        zIndex: z+1, 
        position: 'absolute', 
        top: m + "px", 
        left: l, 
        height: (parseInt($this.outerHeight(false), 10) + m) + "px" 
       }); 

       l = l - $this.outerWidth(); 

      }); 

      $contain.height($mmenu.eq(0).height()); 

      $mnav_a.on('click', function(e) { 

       e.preventDefault(); 
       var $this = $(this); 

       if (!$this.hasClass('active')) { 

        $mmenu.stop(true, true); 

        $mnav_a.removeClass('active'); 
        $this.addClass('active'); 

        $mmenu.filter($('.active')) 
         .removeClass('active') 
         .fadeOut(250) 
         .animate({left:l+"px"}, 250); 

        var $target = $mmenu.filter($this.attr('href')); 

        $contain.animate({height:$target.height()}, 250); 

        $target.addClass('active') 
         .fadeIn(250) 
         .animate({left:0}, 250); 
       } 

       $this.blur(); 
      }); 
     } 
    }); 

}) (jQuery); 

这有利于提高我最感兴趣的领域:

$mmenu.each(function(z) { 

    var $this = $(this); 

    $this.css('height','auto'); 

    $this.css({ 
     zIndex: z+1, 
     position: 'absolute', 
     top: m + "px", 
     left: l, 
     height: (parseInt($this.outerHeight(false), 10) + m) + "px" 
    }); 

    l = l - $this.outerWidth(); 

}); 

$contain.height($mmenu.eq(0).height()); 

请让我知道如果你需要更多信息希望有一个简单的修复,谢谢

+0

会使用类似.on()方法的工作?因此,.on(“resize”,function(){}或.on(“smartresize”,function(){} –

回答

0

我认为你可以调整与CSS,使用百分比的窗口。您可以为某些特定尺寸的设备定义百分比。我只是创建这个CSS例如funcionality。

@media (max-width: 480px) { 
    #divMenu { 
     width:40%; 
     height:70%; 
    } 
} 

@media (min-width: 480px) and (max-width: 1023px) { 
    #divMenu { 
     width:70%; 
     height:80%; 
    } 
} 

@media (min-width: 1024px) { 
    #divMenu { 
     width:50%; 
     height:50%; 
    } 
} 

对不起,对于我可怜的英语。

+0

谢谢Rafael。不幸的是,Media Queries在此示例中不起作用,因为div的高度会有所不同关于他们的内容......并且内容也会随着时间而改变,它需要是动态的 –