2010-02-11 3 views

답변

0

jQuery 매니아 애호가 인 Remy Sharp는 사용자가 쉽게 구현할 수있는 Markey Plugin을 보유하고 있습니다. his blog 또는 demo page을 방문하면 자세한 내용을 수집 할 수 있습니다.

Mootools 사용자의 경우 Mooquee입니다.

http://track.dc.gov/Resource/Script/에서 온라인으로이 예제의 실제 코드를 볼 수도 있습니다. "uiEndless"를 검색하여 대상 스크립팅을 찾으십시오.

+0

감사합니다. Jonathan. 나는 데모를 본다. 그렇게 부드러운 것은 아닙니다. 그래도 선택 윤곽 태그보다 좋습니다. –

+0

@ Vivek : 부드러움은 설정 한 옵션에 따라 결정됩니다. 당신이 그것을 빨리하면, 많은 픽셀을 점프, 그것은 육포가 나타납니다. 픽셀 단위로 느리게 만들면 부드럽게 처리됩니다. – Sampson

+0

정말로 빨리 하나를 시도해보십시오 –

1

그들은 매우 잘 정돈 된 코드 블록을 가지고 있습니다. 사이트를 방문 할 때 가장 좋아하는 JS 디버거를 열고 모든 것이 다가올 때까지 기다린 다음 디버거에서 "모두 끊기"를 누르십시오. 다음과 같은 메시지가 표시됩니다.

Dashboard.UI.EndlessLine = function() { 
    var me = this; 
    me.jq = $(me); 
    me.classNames = { CONTAINER: "uiEndless", VIEW: "uiEndlessView", CANVAS: "uiEndlessCanvas", TILE: "uiEndlessTile" }; 
    var canvas = null; 
    var view = null; 
    var tiles = null; 
    var x = 0; 
    var xx = 0; 
    var canvasWidth = 0; 
    var step = 1; 
    var delay = 40; 
    me.initialize = function(container, data, handler) { 
     required(container, "container"); 
     required(data, "data"); 
     required(handler, "handler"); 
     container.addClass(me.classNames.CONTAINER); 
     view = newDiv(me.classNames.VIEW); 
     canvas = newDiv(me.classNames.CANVAS); 
     view.append(canvas); 
     container.append(view); 
     x = 0; 
     xx = 0; 
     canvasWidth = 0; 
     tiles = me.populateTiles(data, handler); 
     container.click(function() { 
      if (me.started()) me.stop(); else me.start(); 
     }); 
    }; 
    me._resize = function(size) { 
    }; 
    var moveId = 0; 
    me.start = function() { 
     me.stop(); 
     me.tick(); 
    } 
    me.stop = function() { 
     if (moveId > 0) clearTimeout(moveId); 
     moveId = 0; 
    } 
    me.started = function() { 
     return moveId > 0; 
    }; 
    me.tick = function() { 
     var tile = tiles.current(); 
     var width = tile.calculatedWidth; 
     if (x < width - step) { 
      x += step; 
     } else { 
      x = 0; 
      tile.css("left", canvasWidth + "px"); 
      if (tiles.advance()) { 
       xx = 0; 
       canvasWidth = 0; 
       do { 
        current = tiles.current(); 
        width = current.calculatedWidth; 
        current[0].style.left = canvasWidth + "px"; 
        canvasWidth += width; 
       } while (!tiles.advance()); 
      } else { 
       canvasWidth += width; 
      } 
     } 
     canvas[0].style.left = -(xx) + "px"; 
     xx += step; 
     moveId = setTimeout(me.tick, delay); 
    } 
    me.populateTiles = function(data, handler) { 
     var tiles = new Dashboard.Core.List(); 
     var viewWidth = view.contentWidth(); 
     var maxHeight = 0; 
     each(data, function() { 
      var tile = newDiv(me.classNames.TILE); 
      handler.call(this, tile); 
      tile.css({ left: canvasWidth + "px", top: 0 }); 
      canvas.append(tile); 
      var width = tile.outerWidth(); 
      var height = tile.outerHeight(); 
      if (maxHeight < height) maxHeight = height; 
      tile.calculatedWidth = width; 
      canvasWidth += width; // getting width may only be done after the element is attached to DOM 
      tiles.append(tile); 
      view.height(height); 
     }); 
     return tiles.createCycle(); 
    } 
} 

모든 것이 전문적이고 멋지게 네임 스페이스로 보입니다.

업데이트 : 작동 방식에 대한 설명을 보려면 위에 정의 된 tick 메서드를 사용하십시오. 모든 세부 사항을 훑어 보면서 (실제로 나 자신을 연구하지는 않았기 때문에), 단계 크기를 계산하고, 메시지 요소를 약간의 양만큼 왼쪽으로 이동시키고, 앞으로 40 밀리 초 동안 다음 틱 호출을 예약합니다.

+0

매우 인상적입니다. 이 코드를 쉽게 얻을 수있는 방법을 알려주시겠습니까? 파이어 폭스와 함께 파이어 폭스를 사용하고 있습니다. 나는 모두를 어기는 선택권을 보지 않는다. 고마워 많이 –

+0

@ Vivek 나는 실제로 IE8 디버깅을 선호합니다. IE8과 Chrome에는 앞서 언급 한 모든 기능을 갖춘 디버거가 내장되어 있습니다. 파이어 폭스에서는 파이어 버그 (Firebug)가 필요할 것이다. Firebug를 열고 Scripts 탭을 클릭하십시오. 활성화되어 있는지 확인하십시오 (소스 코드가 있어야 함). track.dc.gov 제목 아래에 "Console"이 표시된 곳의 "Script"를 선택하십시오 (보고있는 스크립트를 선택할 수있는 드롭 다운 메뉴가 있음). 그런 다음 "||" (콘솔 단추 왼쪽에있는 일시 중지 단추 모양). –

+0

많은 Jonathan에게 감사드립니다. 나는 지금 본다. –