响应,流体,jquery滑块调整大小有对齐问题

时间:2012-10-28 19:08:04

标签: jquery animation resize responsive-design fluid

修改 重写这篇文章的大部分内容,因为我对代码进行了一些改进,并围绕着这个问题包围了我的大脑...这个滑块意味着响应和流畅,滑动元素是,但在调整活动元素的大小时是不对齐。

要查看问题:

  1. 选择数字2菜单项
  2. 等待滑块移动到第二个场景
  3. 调整屏幕大小。您会注意到第二个和第三个场景都是可见的!
  4. jsfiddle here

    我似乎无法弄清楚如何根据调整大小的像素移动边距。我即将开始寻找调整大小(窗口)。之前和之后调整(窗口)。经过!也许还有更好的方法......请告诉我。

    感谢。

    HTML:

    <div id='main'>
        <div id="introAnime">
            <div class='sliderNav prevNext'>
                <button data-dir='prev' class='left'><span><</span></button>
                <button data-dir='next' class='right'><span>></span></button>
            </div>
    
        <div class='sliderNav sceneBtns'>
            <button data-dir='1'>1</button>
            <button data-dir='2'>2</button>
            <button data-dir='3'>3</button>
        </div>
            <div class="sliderContent">
                <ul>
                  <li class="">1<div class="showScene"></div></li>
                  <li class="">2<div class="showScene"></div></li>
                  <li class="">3<div class="showScene"></div></li>
                </ul>
            </div>
        </div>
    </div>​
    

    JS:

    $(window).resize(function() {
    
      grabVars();
      $('.showScene').css({
        'width' : contWidth + 'px'
      });
      naviSetup();
    
    });
    
    $(document).ready(function(){
        grabVars();
        naviSetup();
        animeSetup();
    
        $('.sliderNav').find('button').on('click', function(){
            moveTo = $(this).data('dir');
            move(moveTo);
        });
    });
    
    function grabVars(){
        introAnimeWidth = $('#introAnime').width();
        contWidth = $('.sliderContent').width();
        contHeight = $('.sliderContent').height();
        numScenes = $('.showScene').length;
        sceneMarginLeft = $('.sliderContent ul')
            .css('margin-left').replace('px','');
    }
    function naviSetup(){
        $('.sliderNav').show();
        $('.prevNext .right').css({
            'left' : ((introAnimeWidth - 43) + 'px')
        });
        sceneBtnsLeft = (introAnimeWidth - $('.sceneBtns').width())/2;
        $('.sceneBtns').css({
            'left' : sceneBtnsLeft
        });
    }
    function animeSetup(){
        $('.sliderContent').css({
            'overflow' : 'hidden'
        });
        $('.showScene').css({
            'width' : contWidth + 'px',
            'height' : contHeight + 'px'
        });
    }
    function move(moveTo){
        grabVars();
        if (moveTo == 'next')
        {
            if ( sceneMarginLeft <= (-1) * ((1*numScenes) - 1) * (contWidth*1) )
            {
                moveValue = 0;
            }
            else
            {
                moveValue = sceneMarginLeft - contWidth;
            }
        }
        else if (moveTo == 'prev')
        {
            if ( sceneMarginLeft >= 0 )
            {
                moveValue = (-1) * ((1*numScenes) - 1) * (contWidth*1);
            }
            else
            {
                moveValue = (1*contWidth) + (1*sceneMarginLeft);
            }
        }
        else
        {
            moveValue = -((moveTo-1) * contWidth);
        }
    
        $('.sliderContent ul').animate({
            'margin-left' : moveValue + 'px'
        }, 'slow');
    
    
    }​
    

    CSS:

    #main{
        width: 80%;
        margin: auto;
    }
    #introAnime{
        width: 100%;
        position: relative;
        height:300px;
        border: 2px solid #cccccc;
        margin-bottom: 5%;
        margin-top: 2%;
        border-radius: 20px;
          box-shadow:
            1px 1px 0 0 #014D06,
            2px 2px 0 0 #014D06,
            3px 3px 0 0 #014D06,
            4px 4px 0 0 #014D06,
            5px 5px 5px 0 #000000;
    }
    .showScene{
        height: 200px;
        width: 680px;
    }
    #introAnime ul li:nth-child(1){
        background-color: #669900;
    }
    #introAnime ul li:nth-child(2){
        background-color: blue;
    }
    #introAnime ul li:nth-child(3){
        background-color: orange;
    }
    .sliderContent{
        overflow: scroll;
        margin: 50px;
        color:#ffffff;
        text-size: 3em;
    }
    
    .sliderContent ul {
        width: 10000px;
        height: 100%;
        list-style: none;
    
    }
    .sliderContent ul li{
        float:left;
        list-style-type: none;
    }
    .sliderNav{
        position: absolute;
        display: none;
    
    }
    .sliderNav button{
        cursor: pointer;
    }
    .prevNext {
        top: 255px;
    }
    .prevNext button{
        width: 40px;
        height: 40px;
        color: #ffffff;
        font-size: 1.5em;
    
    }
    .prevNext .left{
        position: absolute;
        border-bottom-left-radius: 20px;
        border-top-right-radius: 20px;
        left: 5px;
    
    }
    .prevNext .right{
        position: absolute;
        border-bottom-right-radius: 20px;
        border-top-left-radius: 20px;
        left: 737px;
    
    }
    .sceneBtns{
        border: 2px solid #cccccc;
        padding: 5px;
        border-top: 0px;
        border-bottom-left-radius: 20px;
        border-bottom-right-radius: 20px;
        left: 195px;
    }
    .sceneBtns button{
        background-color: #ffffff;
        border: none;
        font-size: 10pt;
        color: #669900;
        padding-left: 10px;
        padding-right: 10px;
    }
    .sceneBtns button:nth-child(1){
        border-right: 2px solid #669900;
    
    }
    .sceneBtns button:nth-child(2){
        border-right: 2px solid #669900;
    
    }​
    

1 个答案:

答案 0 :(得分:0)

修正并更新了小提琴!

Key是跟踪活动的滑动元素,并从窗口调整大小调用一个函数,根据新的宽度和活动幻灯片设置ul边距,如下所示:

function resizeMargin(){
    $('.sliderContent ul').css({
        'margin-left' : -1*(activeSlide-1)*contWidth + 'px'
    });        
}