2013-01-12 3 views
2

나는 이것을 설명하는 제목을 찾는 방법을 정말로 몰랐다. 거의 내가하려는 것은이 아코디언 목록 항목을 클릭 할 때 페이지의 다른면으로 점프하게하는 것입니다. 현재 아코디언이 왼쪽에서 오른쪽으로 열리고 있지만 마지막 셀은 오른쪽으로 이동하지 않고 그 자리에 그대로 있습니다. 마지막 셀을 제자리에 두는 대신 오른쪽으로 점프하게하려면 어떻게해야합니까?JQuery 아코디언 - 마지막 셀 뒤집기

이 지점은 그림을 탭에 넣고 찾아보기 링크의 처음과 끝 부분에 모아 놓는 것입니다.

JSFiddle Example - 마지막 셀

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title>Accordion</title> 
    <link rel="stylesheet" type="text/css" href="redo.css" /> 
</head> 
<body> 
    <div id="hc1" class="haccordion"> 
     <ul> 
      <li> 
       <div class="hpanel"> 
        <div class="preview" id="p1"></div> 
        <div class="contentContainer"> 
         <div class="content"> 

         </div> 
        </div> 
       </div> 
      </li> 

      <li> 
       <div class="hpanel"> 
        <div class="preview" id="p2"></div> 
        <div class="contentContainer"> 

        </div> 
       </div> 
      </li> 

      <li> 
       <div class="hpanel"> 
        <div class="preview" id="p3"></div> 
        <div class="contentContainer"> 

        </div> 
       </div> 
      </li> 

      <li> 
       <div class="hpanel"> 
        <div class="preview" id="p4"></div> 
        <div class="contentContainer"> 
        asdf 
        </div> 
       </div> 
      </li> 

      <li> 
       <div class="hpanel"> 
        <div class="preview" id="p5"></div> 
        <div class="contentContainer"> 

        </div> 
       </div> 
      </li> 
     </ul> 
    </div> 
<!-- Scripts --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script type="text/javascript" src="accordion.js"></script> 
<!-- End Scripts --> 
</body> 

CSS

* 
{ 
    margin:0px; 
    padding:0px 
} 

html, body 
{ 
    height:100%; 
    width: 100%; 
} 

#hc1, #hc1 ul, #hc1 li 
{ 
    height: 100%; 
} 

#hc1, #hc1 ul 
{ 
    width: 100%; 
} 

.preview 
{ 
    width: 50px; 
    float: left; 
    height: 100%; 
    background-color: #E48525 
} 

#p1{background-color: #231F20} 
#p2{background-color: #4F4E4F} 
#p3{background-color: #919191} 
#p4{background-color: #C4C4C3} 
#p5{background-color: #E8E8E8} 
/* 
#p1{background-color: red} 
#p2{background-color: blue} 
#p3{background-color: green} 
#p4{background-color: black} 
#p5{background-color: orange} 
*/ 
.contentContainer 
{ 
    background-color: gray; 
    margin: 0 auto; 
    width: 100%; 
    height: 100%; 
} 

/* -- Start Accordion -- */ 
.haccordion{ 
padding: 0; 
} 

.haccordion ul{ 
margin: 0; 
padding: 0; 
list-style: none; 
overflow: hidden; /*leave as is*/ 
} 

.haccordion li{ 
margin: 0; 
padding: 0; 
display: block; /*leave as is*/ 
overflow: hidden; /*leave as is*/ 
float: left; /*leave as is*/ 
} 
/* -- End Accordion -- */ 

자바 스크립트

0,123,516을 클릭
var haccordion={ 
    //customize loading message if accordion markup is fetched via Ajax: 
    ajaxloadingmsg: '<div style="margin: 1em; font-weight: bold"><img src="ajaxloadr.gif" style="vertical-align: middle" /></div>', 

    accordioninfo: {}, //class that holds config information of each haccordion instance 

    expandli:function(accordionid, targetli){ 
     var config=haccordion.accordioninfo[accordionid] 
     var $targetli=(typeof targetli=="number")? config.$targetlis.eq(targetli) : (typeof targetli=="string")? jQuery('#'+targetli) : jQuery(targetli) 
     if (typeof config.$lastexpanded!="undefined") //targetli may be an index, ID string, or DOM reference to LI 
     { 
      config.$lastexpanded.stop().animate({width:config.paneldimensions.peekw}, config.speed); //contract last opened content 
      config.$lastexpanded.removeClass('active'); 
     } 
     $targetli.stop().animate({width:$targetli.data('hpaneloffsetw')}, config.speed) //expand current content 
     config.$lastexpanded=$targetli 
     if($targetli.attr('class') != 'active') 
     $targetli.addClass('active'); 
    }, 


    urlparamselect:function(accordionid){ 
     var result=window.location.search.match(new RegExp(accordionid+"=(\\d+)", "i")) //check for "?accordionid=index" in URL 
     if (result!=null) 
      result=parseInt(RegExp.$1)+"" //return value as string so 0 doesn't test for false 
     return result //returns null or index, where index is the desired selected hcontent index 
    }, 

    getCookie:function(Name){ 
     var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair 
     if (document.cookie.match(re)) //if cookie found 
      return document.cookie.match(re)[0].split("=")[1] //return its value 
     return null 
    }, 

    setCookie:function(name, value){ 
     document.cookie = name + "=" + value + "; path=/" 
    }, 


    loadexternal:function($, config){ //function to fetch external page containing the entire accordion content markup 
     var $hcontainer=$('#'+config.ajaxsource.container).html(this.ajaxloadingmsg) 
     $.ajax({ 
      url: config.ajaxsource.path, //path to external content 
      async: true, 
      error:function(ajaxrequest){ 
       $hcontainer.html('Error fetching content.<br />Server Response: '+ajaxrequest.responseText) 
      }, 
      success:function(content){ 
       $hcontainer.html(content) 
       haccordion.init($, config) 
      } 
     }) 
    }, 


    init:function($, config){ 
      haccordion.accordioninfo[config.accordionid]=config //cache config info for this accordion 
      var $targetlis=$('#'+config.accordionid).find('ul:eq(0) > li') //find top level LIs 
      config.$targetlis=$targetlis 
      config.selectedli=config.selectedli || [] //set default selectedli option 
      config.speed=config.speed || "normal" //set default speed 

//KEY_CHANGE_BEGIN 
      var maxWidth = $targetlis.parent().width(); 
      $targetlis.each (function() { maxWidth -= $(this).outerWidth (true); }); 

      $targetlis.each(function(i){ 
       var $target=$(this).data('pos', i) //give each li an index # 

       var lclMaxWidth  = maxWidth + $target.find ('.hpanel:eq(0)').outerWidth (true); 
       $target.css ('width', config.paneldimensions.fullw); 

       //get offset width of each .hpanel DIV (config.dimensions.fullw + any DIV padding) 
       var hpaneloffsetw = $target.find ('.hpanel:eq(0)').outerWidth (true); 
       if (hpaneloffsetw > lclMaxWidth) 
        hpaneloffsetw = lclMaxWidth; 

       $target.data('hpaneloffsetw', hpaneloffsetw); 
       $target.css ('width', ''); 
//KEY_CHANGE_END 

       $target.click(function(){ 
         haccordion.expandli(config.accordionid, this) 
        config.$lastexpanded=$(this); 
       }) 
       if (config.collapsecurrent){ //if previous content should be contracted when expanding current 
         config.$lastexpanded.removeClass('active'); 
        $target.click(function(){ 
         $(this).stop().animate({width:config.paneldimensions.peekw}, config.speed); //contract previous content 
        }) 
       } 
      }) //end $targetlis.each 
      var selectedli=haccordion.urlparamselect(config.accordionid) || ((config.selectedli[1] && haccordion.getCookie(config.accordionid))? parseInt(haccordion.getCookie(config.accordionid)) : config.selectedli[0]) 
      selectedli=parseInt(selectedli) 
      if (selectedli>=0 && selectedli<config.$targetlis.length){ //if selectedli index is within range 
       config.$lastexpanded=$targetlis.eq(selectedli) 
       config.$lastexpanded.css('width', config.$lastexpanded.data('hpaneloffsetw')) //expand selected li 
      } 
      $(window).bind('unload', function(){ //clean up and persist on page unload 
       haccordion.uninit($, config) 
      }) //end window.onunload 
    }, 

    uninit:function($, config){ 
     var $targetlis=config.$targetlis 
     var expandedliindex=-1 //index of expanded content to remember (-1 indicates non) 
     $targetlis.each(function(){ 
      var $target=$(this) 
      $target.unbind() 
      if ($target.width()==$target.data('hpaneloffsetw')) 
       expandedliindex=$target.data('pos') 
     }) 
     if (config.selectedli[1]==true) //enable persistence? 
      haccordion.setCookie(config.accordionid, expandedliindex) 
    }, 

    setup:function(config){ 
     //Use JS to write out CSS that sets up initial dimensions of each LI, for JS enabled browsers only 
     document.write('<style type="text/css">\n') 
     document.write('#'+config.accordionid+' li{width: '+config.paneldimensions.peekw+';\nheight: '+config.paneldimensions.h+';\n}\n') 
     document.write('#'+config.accordionid+' li .hpanel{width: '+config.paneldimensions.fullw+';\nheight: '+config.paneldimensions.h+';\n}\n') 
     document.write('<\/style>') 
     jQuery(document).ready(function($){ //on Dom load 
      if (config.ajaxsource) //if config.ajaxsource option defined 
       haccordion.loadexternal($, config) 
      else 
       haccordion.init($, config) 
     }) //end DOM load 
    } 
} 

haccordion.setup({ 
    accordionid: 'hc1', //main accordion div id 
    paneldimensions: {peekw:'50px', fullw:'100%', h:'100%'}, 
    selectedli: [4, false], //[selectedli_index, persiststate_bool] 
    collapsecurrent: false //<- No comma following very last setting! 
}) 
+0

클릭하면 페이지의 반대쪽으로 이동하면 무엇을 의미합니까? 그게 플래시 이건 그냥 이미지 이건 원하는 행동의 예가 있습니까? – Max

+0

우물 바로 지금 마지막 셀 (가장 어두운 셀)을 클릭하면 내용을 보여주기 위해 모든 것을 오른쪽으로 밀었습니다. 대신 원하는 셀을 오른쪽으로 이동하면 모든 셀이 오른쪽에있게됩니다. –

+0

이게 뭐니? http://www.dynamicdrive.com/dynamicindex17/haccordion.htm – Max

답변

2

는 여기있다 : tinker.io/f7fe4/12

이는 오른쪽으로 첫번째 미리보기를 떠 필요로하는 모든 버전의 간단한 변화이다. 프로그래밍 방식 또는 CSS로 수행 할 수 있습니다 (IE7 +에서 버그가있을 수 있습니다) :

$('#hc1 li .preview').first().css('float','right'); 

또는

#hc1 li:first-child .preview { 
    float:right; 
} 

-

이 당신이 찾고있는 효과의 종류인가?

https://tinker.io/f7fe4/8

여기에 영향을 같은 종류는 '부드러운'애니메이션,이다는

https://tinker.io/f7fe4/9

(그것은 그러나 화면에 여전히 외부 사업부를 유지) 그리고 이것은 내가 당신을 어떻게 생각입니다 처음에 얘기하고 있었다.

https://tinker.io/f7fe4/4 (이것은 가장 왼쪽의 셀을 오른쪽으로 튀어 나오게하고 무한한 슬라이더와 같은 종류의 것을 연다.)

+0

정렬하지만 마지막 탭을 클릭하면 - 다른 모든 탭은 사라집니다. 적어도 크롬에서는 어쨌든. –

+0

다른 모든 탭이 사라져서 오른쪽으로 이동합니까? 다시 클릭하면 다시 열립니다. – Max

+0

이 새 슬라이드 방법으로 업데이트되었습니다. – Max