2013-10-10 1 views
0

나는 Moving Boxes 플러그인을 사용하고 있으며 전체 너비 이미지 슬라이더로 적용했습니다. 로드에 반응하지만, 크기를 조절할 때 응답하는 데 문제가 있습니다. CSS의 너비가 특정 값 (예 : JS)으로 고정되고 CSS에 정의 된 너비가 더 이상 적용되지 않는 것 같습니다.로드시 반응이 좋지만 크기가 조절되지 않는 슬라이더

아직 JS를 쓸 수 없으므로 도움을 주시면 감사하겠습니다. 미리 감사드립니다!

Testing site

CSS (노트에서 가정) 폭을 생성

.slider { 
    width: 100%; 
} 

.slider li { 
    width: 80%; 
} 

.mb-wrapper { 
    margin: 0 auto; 
    position: relative; 
    left: 0; 
    width:100% !important; 
    top: 0; 
} 

/* Panel Wrapper */ 
.mb-slider, .mb-scroll { 
    width: 100%; 
    height: 100%; 
    overflow: hidden; 
    margin: 0 auto; 
    padding: 0; 
    position: relative; 
    left: 0; 
    top: 0; 
} 

/*** Slider panel ***/ 
.mb-slider .mb-panel { 
    margin: 0; 
    display: block; 
    cursor: pointer; 
    float: left; 
    list-style: none; 
} 

.mb-panel.current img { 
    opacity:1; 
    filter: alpha(opacity=100); 
    -webkit-transition: all 0.2s; 
    -moz-transition: all 0.2s; 
    transition: all 0.2s; 
} 

/*** Inside the panel ***/ 
.mb-inside { 
    width:90%; 
    margin:0 auto; 
} 

.mb-inside img { 
    width:100%; 
    opacity:0.4; 
    filter: alpha(opacity=40); 
    -webkit-transition: all 1s; 
    -moz-transition: all 1s; 
    transition: all 1s; 
} 

.mb-inside * { 
    max-width: 100%; 
} 

JS. 전체 JS 파일은 here에 임시로 연결됩니다.

// defaults 
       base.$window = base.$el.parent(); // mb-scroll 
       base.$wrap = base.$window.parent() // mb-wrapper 
        .prepend('<a class="mb-scrollButtons mb-left"></a>') 
        .append('<a class="mb-scrollButtons mb-right"></a><div class="mb-left-shadow"></div><div class="mb-right-shadow"></div>'); 

       base.$panels = base.$el.children().addClass('mb-panel'); 
       base.runTime = $('.mb-slider').index(base.$el) + 1; // Get index (run time) of this slider on the page 
       base.regex = new RegExp('slider' + base.runTime + '=(\\d+)', 'i'); // hash tag regex 

       base.initialized = false; 
       base.currentlyMoving = false; 
       base.curPanel = (o.initAnimation) ? 1 : base.getHash() || o.startPanel; 
       // save original slider width 
       base.width = (o.width) ? parseInt(o.width,10) : base.$el.width(); 
       // save panel width, o.panelWidth originally a fraction (0.5 of o.width) if defined, or get first panel width 
       // now can be set after initialization to resize using fraction (value <= 2) or px (all values > 2) 
       base.pWidth = (o.panelWidth) ? (o.panelWidth <=2 ? o.panelWidth * base.width : o.panelWidth) : base.$panels.eq(0).width(); 

특정 옵션을 변경할 수있는 JS 파일의 일부가 있습니다. 이러한 옵션의 하단에서는이 말한다 :

// deprecated options - but still used to keep the plugin backwards compatible 
// and allow resizing the overall width and panel width dynamically (i.e. on window resize) 
// width  : '100%',  // overall width of movingBoxes 
// panelWidth : 0.8  // current panel width adjusted to 80% of overall width 

언제 않은 회색 '폭'과 '패널 폭'나는 이상한 결과를 얻을 값을 적용합니다. 필요한 경우 정교 할 수 있습니다. 내 CSS의 일부가 이러한 옵션이 JS에서 처리되는 방법과 충돌 할 수 있습니다.

답변

1

내가 그것을 테스트하지 않은 다음 코드

$(function(){ 
    $('.slider').movingBoxes({ 
     startPanel : 1,  // start with this panel 
     wrap   : false, // if true, the panel will infinitely loop 
     buildNav  : false, // if true, navigation links will be added 
     navFormatter : function(){ return "&#9679;"; } 
    }); 
}); 

$(window).on('resize', function() { 
    $('.slider').movingBoxes(); 
}); 

를 사용해보십시오 그러나 나는 그것이 작동한다고 생각합니다. 그렇지 않은 경우 movingBoxes 메소드에 전달 된 여러 매개 변수로 실험 할 수 있습니다. 여기서 우리가 직면하고

$.fn.movingBoxes = function(options, callback, flag){ 
    var mb; 
    return this.each(function(){ 
     mb = $(this).data('movingBoxes'); 
     // initialize the slider but prevent multiple initializations 
     if ((typeof(options)).match('object|undefined')){ 
      if (mb && options instanceof $ && options.length) { 
       // pass a jQuery object to change panels 
       mb.change(options, callback, flag); 
      } else if (mb) { 
       mb.update(callback, flag); 
      } else { 
       (new $.movingBoxes(this, options)); 
      } 
     } else if (mb) { 
      // page #, autoplay, one time callback, if flag is false then no events triggered and animation time = 0 
      mb.change(options, callback, flag); 
     } 
    }); 
}; 

모든 문제가 movingBoxes 인스턴스의 중복입니다 : 플러그인 자체가 이런 식으로 초기화됩니다. 예 : 개체가로드됩니다. 그런 다음 창 크기를 조정하면 개체가 업데이트 만되거나 (원하는 동작) 예상치 못한 동작을 일으킬 수있는 두 번째 인스턴스가 만들어 질 것인지 여부가 문제입니다. 코드의 주석은 '여러 번 초기화하지 않을 것을 제안합니다.

+0

안녕하세요. 입력 해 주셔서 감사합니다. resize에서 같은 함수를 호출하는 것은 의미가 있지만 불행히도 작동하지 않습니다 (현재 [http://rockodzn.com/testing3/]에 업로드 됨). 예기치 않은 무언가가 나타났습니다. 그것은로드 할 때 호출하는 함수를 제거하고 resize를 호출 할 때 발생합니다. 따라서 크기를 조정하면 크기 조정을 시작하자 마자 JS가로드되지만 그 직후에는 응답이 중지됩니다. (현재 업로드 됨 [here] (http://rockodzn.com/testing2/) JS가로드 되 자마자 CSS에 쓰여진 너비 값이 고정 값으로 JS에 의해 덮어 쓰여집니다. –

+0

나는 이것을 사용할 수 있었다 : 'var timer; \t \t $ (창) .resize (함수() { \t \t \t 사항 clearTimeout (타이머) '. 슬라이더' \t \t \t VAR 슬라이더 = $() 데이터를 ('movingBoxes'). \t \t \t 슬라이더 .options.width = $ (window) .width() * 1; // 브라우저의 너비를 100 %로 만듭니다. \t \t \t slider.options.panelWidth = 0.8; // 래퍼 폭의 80 % \t \t \t을 방지 // 일명 스로틀 \t \t \t = 타이머의 setTimeout (함수()() {false를 \t \t \t \t slider.update; \t \t \t}에 크기를 연속적으로 업데이트 , 100); \t \t}); 크기를 조정할 때 함수를로드 할 수 있지만, 다른 크기가 아닌 첫 번째 슬라이더에만 적용됩니다. 클래스 이름은 모두 동일합니다. 어떤 아이디어? –

+0

'$ ('. 슬라이더')를 호출 할 때 data ('movingBoxes')'.slider' 클래스를 사용하는 모든 요소를 ​​_picks up_하지만 'jQuery.data' 함수는 첫 번째 요소에서만 호출됩니다. 나는 모든 작업을'jQuery.each'로 래핑하고'timer'를 배열로 정의 할 것을 제안합니다. 전체 코드 [여기] (http://jsfiddle.net/w8eEN/)를 참조하십시오. 분명히 바이올린에서는 작동하지 않지만 더 읽기 쉽도록하기 위해 필자는 그것을 넣었습니다. – matewka

관련 문제