2009-02-24 4 views
6

IE에서 성능이 좋은 UI 코드를 얻는 데 문제가 있습니다.IE의 테이블에서 jQuery UI 성능 문제가 발생했습니다.

나는 값의 매트릭스 인 테이블을 가지고 있습니다. 각 셀은 비어 있거나 항목 목록을 보유 할 수 있습니다.

사용자가 셀간에 항목을 드래그 할 수있게하려고합니다.

그래서 내 HTML과 같은 : 절단 및 미완성

$j('.draggable-item').each(function() 
{ 
    $j(this).draggable({ 
     addClasses: false, 
     revert: true, 
     zIndex: 2000, 
     cursor: 'move' 
    }); 
}); 

$j('.droppable-cell').each(function() 
{ 
    $j(this).droppable({ 
     addClasses: false, 
     activeClass: 'droppable-cell-candrop', 
     hoverClass: 'droppable-cell-hover', 
     tolerance: 'pointer', 

     drop: function(event, ui) 
     { 
      //function to save change 
     }); 
    }); 
}); 

참고이 단순화된다, 그런 다음 내가 jQuery를 1.3.1와 jQuery를 UI의 1.6rc6를 사용하고

<table> 
    <tr><td></td><th scope="col">col 1</th><th scope="col">col 2</th></tr> 
    <tr><th scope="row">row 1</th> 
     <td class="droppable-cell"> 
      <div class="draggable-item">item A</div> 
      <div class="draggable-item">item B</div> 
     </td> 
     <td class="droppable-cell"></td> 
    </tr> 
    <tr><th scope="row">row 2</th> 
     <td class="droppable-cell"></td> 
     <td class="droppable-cell"> 
      <div class="draggable-item">item C</div> 
      <div class="draggable-item">item D</div> 
     </td> 
    </tr> 
</table> 

암호.

내 문제는 FX, Safari, Chrome 등 (모든 괜찮은 브라우저)에서 제대로 작동한다는 것입니다.

IE는 정말 어려움을 겪습니다. 5x5 테이블을 사용하면 드래그 시작시 IE의 지연이 눈에.니다. 어쩌면 100 개 항목이있는 10x10 표에서 드래그 시작으로 브라우저가 중단됩니다.

최대 20x15 셀을 지원할 수 있고 최대 500 개의 항목을 지원할 수 있기를 원합니다. 그것이 있어야하는 것처럼 보이지 않습니다.

내가 잘못 했나요? 이 같은 IE에서 페이지를 느리게하지 않는 방법이 있나요?

+1

나는 또한이 정확한 문제가 있습니다. 큰 테이블, 테이블 내의 중첩 된 div. 파이어 폭스는 10 초 이내에 페이지를 렌더링합니다. 즉, 2 분간 기다린 후에 테이블을 렌더링합니다. 파이어 폭스 여전히 teh 드래그와 dtop, 즉 크롤링과 함께 지퍼. 사실 그게 얼어, 드래그 앤 드롭 sdoes 작동하지 않습니다. 아래의 몇 가지 해결책을 시도 할 것입니다. 고정 너비 및 #id tagname.class 참조가 있습니다.그러나 나는 그것이 여전히 느릴 것이라고 두려워한다. 누구든지 좋은 데다 있다면, 나는 모든 귀가 될 것입니다. – Bingy

+0

예 - 내 솔루션은 IE 사용자를 제한하는 것입니다. FX 사용자와 Chrome 사용자가 할 수있는 행과 열의 하위 집합 만 선택할 수 있습니다. 그럼에도 불구하고 IE8은 단지 25 개의 셀 (5x5 격자) 만 처리 할 수 ​​있습니다. 7과 6은 절망적입니다. 90 년대 후반 웹 개발에 대한 추억을 되살려주고 추한 일이지만, 브라우저가 너무 가난한 경우 어떻게 할 수 있습니까? – Keith

+0

같은 문제가있어서 Internet Explorer는 대용량 그리드에서 느려지지만 Chrome과 Firefox는 정상입니다. –

답변

2

이 정확한 문제는 iGoogle 및 다른 simliar 앱이 가장자리 주위에 점선이있는 투명 상자를 사용하는 이유입니다. IE는 위에서 설명한 문제 때문에 전체 개체를 끌 수 없습니다.

+0

http://www.google.com/ig?를 의미합니까? IE에서도 실제 콘텐츠를 페이지에서 끌어옵니다. 나는 단지 작은 div를 드래그하려고합니다. – Keith

2

테이블 렌더링이 될 수 있습니다. 테이블없이 시도 할 수 있습니까?

당신의 세포 크기가 동일한 경우, 당신이 그들을 떠있는 테이블과 같은 화면을 얻을 수 있습니다

<style> 
.droppable-cell{ 
    float:left; width: 50%; height: 20px; border: 1px solid black; 
} 
</style> 

<div class="droppable-cell"> 
     <div class="draggable-item">item A</div> 
     <div class="draggable-item">item B</div> 
</div> 
<div class="droppable-cell"></div> 
<div class="droppable-cell"></div> 
<div class="droppable-cell"> 
     <div class="draggable-item">item C</div> 
     <div class="draggable-item">item D</div> 
</div> 

'고정'으로 table-layout 스타일을 설정해야합니다 테이블을한다 사용하고 세포의 크기를 지정 할 수있다하면 도움.

+0

고마워, 좋은 생각 -하지만 이것은 실제로 표 형식의 데이터입니다. 행과 열 머리글은 스팬이있는 계층 구조입니다. 나는 또한 내가 세포 크기를 고칠 수 있다고 생각하지 않는다. – Keith

3

jQuery가 검색해야하는 DOM 부분을 좁히면 도움이 될 수 있습니다.

<table id="myTable"> 

그런 다음이 컨테이너 내에서 요소를 찾기 위해 jQuery를 선택을 변경 포함하는 DOM 요소에 ID를 추가

$j('#myTable .draggable-item').each(function() { ... 
+0

감사합니다. 나는 그것을 시도 할 것이다. – Keith

+0

나는 이것이 문서에 따라 $ ('# myTable, .draggable-item')라고 생각했다. – Jay

+1

@ Jay. 아니, 'Ancestor Descendent'선택자 (http://docs.jquery.com/Selectors/descendant#ancestordescendant)를 추천했습니다. 쉼표는 'n'선택기입니다 (http://docs.jquery.com/Selectors/multiple#selector1selector2selectorN).이 경우는 유용하지 않지만 어떤 경우에는 유용합니다. –

1

주위에 낙하 할 정의에서 'activeClass'을 떨어지고, 만 사용하여 내 작업 'hoverClass'.

약 10 개의 열이있는 약 150 개의 행에 대한 표에 나와 있습니다. 그것은 10 초 지연에서 1 미만으로 갔다. 끌기는 조금 덜컹 거림하지만 사용할 수는 없다.

관련 문제