2012-07-30 119 views
0

這裏是我用於水平手風琴的jquery代碼。一切工作正常,但在這段代碼中的主div寬度固定爲100%(我希望這是自動寬度)。你能確定嗎?手風琴的自動寬度

(function(jQuery) { 
    $('#accordion-1').easyAccordion({ 
     autoStart: false, 
     slideInterval: 3000 
    jQuery.fn.easyAccordion = function(options) { 

    var defaults = {    
     slideNum: false, 
     autoStart: false, 
     slideInterval: 3000 
    }; 

    this.each(function() { 

     var settings = jQuery.extend(defaults, options);   
     jQuery(this).find('dl').addClass('easy-accordion'); 


     // -------- Set the variables ------------------------------------------------------------------------------ 

     jQuery.fn.setVariables = function() { 
      dlWidth = jQuery(this).width(); 
      dlHeight = jQuery(this).height(); 
      dtWidth = jQuery(this).find('dt').outerHeight(); 
      if (jQuery.browser.msie){ dtWidth = $(this).find('dt').outerWidth();} 
      dtHeight = dlHeight - (jQuery(this).find('dt').outerWidth()-jQuery(this).find('dt').width()); 
      slideTotal = jQuery(this).find('dt').size(); 
      ddWidth = dlWidth - (dtWidth*slideTotal) - (jQuery(this).find('dd').outerWidth(true)-jQuery(this).find('dd').width()); 
      ddHeight = dlHeight - (jQuery(this).find('dd').outerHeight(true)-jQuery(this).find('dd').height()); 
     }; 
     jQuery(this).setVariables(); 


     // -------- Fix some weird cross-browser issues due to the CSS rotation ------------------------------------- 

     if (jQuery.browser.safari){ var dtTop = (dlHeight-dtWidth)/2; var dtOffset = -dtTop; /* Safari and Chrome */ } 
     if (jQuery.browser.mozilla){ var dtTop = dlHeight - 20; var dtOffset = - 20; /* FF */ } 
     if (jQuery.browser.msie){ var dtTop = 0; var dtOffset = 0; /* IE */ } 


     // -------- Getting things ready ------------------------------------------------------------------------------ 

     var f = 1; 
     jQuery(this).find('dt').each(function(){ 
      jQuery(this).css({'width':dtHeight,'top':dtTop,'margin-left':dtOffset});  
      if(settings.slideNum == true){ 
       jQuery('<span class="slide-number">'+0+f+'</span>').appendTo(this); 
       if(jQuery.browser.msie){  
        var slideNumLeft = parseInt(jQuery(this).find('.slide-number').css('left')) - 14; 
        jQuery(this).find('.slide-number').css({'left': slideNumLeft}) 
        if(jQuery.browser.version == 6.0 || jQuery.browser.version == 7.0){ 
         jQuery(this).find('.slide-number').css({'bottom':'auto'}); 
        } 
        if(jQuery.browser.version == 8.0){ 
        var slideNumTop = jQuery(this).find('.slide-number').css('bottom'); 
        var slideNumTopVal = parseInt(slideNumTop) + parseInt(jQuery(this).css('padding-top')) - 12; 
        jQuery(this).find('.slide-number').css({'bottom': slideNumTopVal}); 
        } 
       } else { 
        var slideNumTop = jQuery(this).find('.slide-number').css('bottom'); 
        var slideNumTopVal = parseInt(slideNumTop) + parseInt(jQuery(this).css('padding-top')); 
        jQuery(this).find('.slide-number').css({'bottom': slideNumTopVal}); 
       } 
      } 
      f = f + 1; 
     }); 

     if(jQuery(this).find('.active').size()) { 
      jQuery(this).find('.active').next('dd').addClass('active'); 
     } else { 
      jQuery(this).find('dt:first').addClass('active').next('dd').addClass('active'); 
     } 

     jQuery(this).find('dt:first').css({'left':'0'}).next().css({'left':dtWidth}); 
     jQuery(this).find('dd').css({'height':ddHeight});  


     // -------- Functions ------------------------------------------------------------------------------ 

     jQuery.fn.findActiveSlide = function() { 
       var i = 1; 
       this.find('dt').each(function(){ 
       if(jQuery(this).hasClass('active')){ 
        activeID = i; // Active slide 
       } else if (jQuery(this).hasClass('no-more-active')){ 
        noMoreActiveID = i; // No more active slide 
       } 
       i = i + 1; 
      }); 
     }; 

     jQuery.fn.calculateSlidePos = function() { 
      var u = 2; 
      jQuery(this).find('dt').not(':first').each(function(){  
       var activeDtPos = dtWidth*activeID; 
       if(u <= activeID){ 
        var leftDtPos = dtWidth*(u-1); 
        jQuery(this).animate({'left': leftDtPos}); 
        if(u < activeID){ // If the item sits to the left of the active element 
         jQuery(this).next().css({'left':leftDtPos+dtWidth});  
        } else{ // If the item is the active one 
         jQuery(this).next().animate({'left':activeDtPos}); 
        } 
       } else { 
        var rightDtPos = dlWidth-(dtWidth*(slideTotal-u+1)); 
        jQuery(this).animate({'left': rightDtPos}); 
        var rightDdPos = rightDtPos+dtWidth; 
        jQuery(this).next().animate({'left':rightDdPos});  
       } 
       u = u+ 1; 
      }); 


     }; 

     jQuery.fn.activateSlide = function() { 
      this.parent('dl').setVariables();  
      this.parent('dl').find('dd').css({'display':'block'}); 
      this.parent('dl').find('dd.plus').removeClass('plus'); 
      this.parent('dl').find('.no-more-active').removeClass('no-more-active'); 
      this.parent('dl').find('.active').removeClass('active').addClass('no-more-active'); 
      this.addClass('active').next().addClass('active');  
      this.parent('dl').findActiveSlide(); 
      if(activeID < noMoreActiveID){ 
       this.parent('dl').find('dd.no-more-active').addClass('plus'); 
      } 
      this.parent('dl').calculateSlidePos();  
     }; 

     jQuery.fn.rotateSlides = function(slideInterval, timerInstance) { 
      var accordianInstance = jQuery(this); 
      timerInstance.value = setTimeout(function(){accordianInstance.rotateSlides(slideInterval, timerInstance);}, slideInterval); 
      jQuery(this).findActiveSlide(); 
      var totalSlides = jQuery(this).find('dt').size(); 
      var activeSlide = activeID; 
      var newSlide = activeSlide + 1; 
      if (newSlide > totalSlides) newSlide = 1; 
      jQuery(this).find('dt:eq(' + (newSlide-1) + ')').activateSlide(); // activate the new slide 
     } 


     // -------- Let's do it! ------------------------------------------------------------------------------ 

     function trackerObject() {this.value = null} 
     var timerInstance = new trackerObject(); 

     jQuery(this).findActiveSlide(); 
     jQuery(this).calculateSlidePos(); 

     if (settings.autoStart == true){ 
      var accordianInstance = jQuery(this); 
      var interval = parseInt(settings.slideInterval); 
      timerInstance.value = setTimeout(function(){ 
       accordianInstance.rotateSlides(interval, timerInstance); 
       }, interval); 
     } 

     jQuery(this).find('dt').not('active').click(function(){   
      jQuery(this).activateSlide(); 
      clearTimeout(timerInstance.value); 
     });  

     if (!(jQuery.browser.msie && jQuery.browser.version == 6.0)){ 
      jQuery('dt').hover(function(){ 
       jQuery(this).addClass('hover'); 
      }, function(){ 
       jQuery(this).removeClass('hover'); 
      }); 
     } 
    }); 
    }; 
})(jQuery);​ 

下面是HTML

<div id="accordion-1"> 
       <dl> 
        <dt>First slide</dt> 
        <dd><h2>This is the first slide</h2><p></dd> 
        <dt>Second slide</dt> 
        <dd><h2>Here is the second slide</h2></dd> 
        <dt>One more slide</dt> 
        <dd><h2>One more slide to go here</h2><p></dd> 
        <dt>Another slide</dt> 
        <dd><h2>Another slide to go here</h2><p></dd>         
       </dl> 
</div> 

CSS

.easy-accordion{display:block;position:relative;overflow:hidden;padding:0;margin:0; width:auto} 
.easy-accordion dt,.easy-accordion dd{margin:0;padding:0} 
.easy-accordion dt,.easy-accordion dd{position:absolute} 
.easy-accordion dt{margin-bottom:0;margin-left:0;z-index:5;/* Safari */ -webkit-transform: rotate(-90deg); /* Firefox */ -moz-transform: rotate(-90deg);-moz-transform-origin: 20px 0px; /* Internet Explorer */ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);cursor:pointer;} 
.easy-accordion dd{z-index:1;opacity:0;overflow:hidden} 
.easy-accordion dd.active{opacity:1;} 
.easy-accordion dd.no-more-active{z-index:2;opacity:1} 
.easy-accordion dd.active{z-index:3} 
.easy-accordion dd.plus{z-index:4} 
.easy-accordion .slide-number{position:absolute;bottom:0;left:10px;font-weight:normal;font-size:1.1em;/* Safari */ -webkit-transform: rotate(90deg); /* Firefox */ -moz-transform: rotate(90deg); /* Internet Explorer */ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);} 

#accordion-1{ height:110px; background:#bababa; border-radius:8px; width:auto} 
    #accordion-1 dl{height:110px; width:auto} 
    #accordion-1 dt{ text-align:left;padding:8px 15px 8px 10px; 
    font:bold 12px Myriad Pro, Verdana, Geneva, sans-serif; color:#2c3e52; 
    background-color: #B3B3B3; 
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#BEBEBE), to(#B3B3B3)); 
    background: -moz-linear-gradient(top, #BEBEBE 0%, #B3B3B3 100%); 
    border-radius:8px; 
    box-shadow: 0px -2px 3px #616161; 
    } 
    #accordion-1 dt.active{cursor:pointer; background:#bababa} 
    #accordion-1 dt.hover{background-color:#bababa} 
    #accordion-1 dd{ 
     padding:15px; background-color:#f3f3f3; border-left:0; margin:5px 0px; border-radius:6px 0px 0px 6px; 
     -webkit-box-shadow: inset 0px 2px 2px #9b9b9b; box-shadow: inset 0px 2px 2px #9b9b9b; 

    } 
+0

易手風琴的css值是多少? – 2012-07-30 12:11:23

+0

在你的css的第一行中,它表示#accordion-1被設置爲width:auto。這意味着它會延伸到它的父母的100%。 – 2012-07-30 12:14:48

+0

@Daniel Casserly編輯了css pls chk。 Evn如果我從#accordion-1中刪除了自動寬度-1也是同樣的問題 – Sowmya 2012-07-30 12:16:40

回答

0

首先改變的

(function(jQuery) { 

(function($) { 

這允許在包裝函數中使用$。你應該使用$而不是jQuery

而對於你的問題:這是你的瀏覽器設置爲div的100%。 Div總是擴展到您放置它們的元素的全部寬度。

附註:使一個div 100%寬度有點不同,然後保留默認寬度。這可能會讓人有點困惑,所以我不會詳細介紹。如果您想了解更多信息,請參閱:http://www.quirksmode.org/css/box.html

0

這有點晚了,但您應該將手風琴div放在另一個div容器中,然後將此css應用於此容器。