2009-03-20 3 views
0

다음은 현재 상황입니다.일시적으로 스크롤 가능한 div가 스크롤되지 않도록하려면 어떻게해야합니까?

스크롤 가능한 div 몇 개가 포함 된 웹 페이지가 있습니다. 각 div에는 여러 개체가 포함되어 있습니다. 각 객체에서 수행 할 수있는 작업의 팝업 메뉴를 표시하기 위해 YUI를 사용하고 있습니다. 각 객체에는 동적으로 생성되고 표시되는 관련 메뉴가 있습니다. 팝업 메뉴는 크고 스크롤 가능한 div의 경계를 겹칠 수 있습니다.

포커스가있는 문제 (메뉴에 액세스 할 수 있어야 함)에서 스크롤 가능한 div 가장자리에 마우스를 올려 놓으면 div가 자동으로 스크롤되어 내용이 이동하지만 움직이지 않는 메뉴. 이런 일이 생길 때 동적으로 메뉴를 이동하려고하면 좋지 않은 사용자 경험을 제공 할 것이라고 생각하면서 내가하고 싶은 일이 아닙니다.

그래서이 초점 메뉴에서 div를 스크롤하지 못하게해야합니다. 최상의 사용자 인터페이스를 제공하려는 나의 아이디어는 메뉴가 열려있을 때 이러한 내부 div가 스크롤되지 않도록하는 것입니다. 이렇게하면 메뉴가 최적의 위치에 배치되어 사용자에게 어떤 항목이 적용되는지 표시됩니다. 사용자가 상자를 스크롤하려면 클릭하여 메뉴를 닫은 다음 정상적으로 스크롤하십시오.

어떻게하면됩니까? 주요 브라우저에서 작동하는 솔루션이 필요합니다.

저의 첫 번째 생각은 특정 요소에 대해 이벤트를 onscroll 수신하는 것입니다. 불행히도 스크롤링이 발생하는 것을 막기위한 쉬운 방법이없는 것처럼 보입니다. 하나 들어, 내 자바 이벤트 코드는 실제 스크롤이 발생한 후에 실행하는 것으로 보입니다.

그럼, 객체가 스크롤 한 후 내 코드가 실행되고 있기 때문에, 난 그냥 obj.scrollTop 및 obj.scrollLeft를 재설정 할 수 있다고 생각했다. 물론 느린 브라우저에서 사용자가 div 내부의 내용을 "주위를 뛰어"볼 수 있을지는 모르지만이 방법이 효과가있는 것으로 보입니다. 또한 요소가 스크롤하는 양이 이벤트 객체의 일부인 경우 정말 좋습니다. 어딘가에 거기 붙어 있니? 이 요소에 대한 scrollTop 및 scrollLeft 변수를 저장 한 다음 스크롤을 일시적으로 사용하지 않도록 설정하는 대신 사용할 수있는 대안을 찾고 있습니다.

이 전체 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

왜이 작업을 수행 하시겠습니까? 유용성 악몽처럼 들리 네요. 사용법의 맥락을 설명해 주시겠습니까? – Rahul

+0

내 생각 엔 EU가 이용 약관이나 라이선스 계약을 읽도록 강제하는 것입니다. –

+0

@Rahul 내가 뭘하려고하는지 더 자세한 정보로 내 질문을 업데이트했습니다. 그것은 총체적인 상황이고 이것이 이것을 처리하는 가장 좋은 방법이라고 생각합니다. –

답변

0

이 문제를 해결할 수있는 방법을 찾았습니다. scrollable div에서 메뉴 요소를 제거한 다음 document.body에 직접 추가하면 브라우저가 div를 스크롤하여 포커스가있는 요소를 표시하는 것을 중지합니다 (요소가 이미 완벽하게 표시되어 있음에도 불구하고).

시간과 답변에 감사드립니다.

3

간단한 대답은 불가능합니다. 브라우저 간 솔루션을 원한다면 두 배로는 안됩니다.

사용자에게 무언가를 스크롤 할 수있는 확실한 수단을 제공 한 다음 단순한 UI 디자인이 좋지 않다는 사실을 부인합니다.

좋아, 편집 한 후에는 실제로 사용자가 스크롤하지 못하게하려고하는 것으로 나타났습니다.

주된 대답은 사실입니다. 완전히 초점이 맞지 않고 스크롤을 일으키는 사각형 (아마 앵커?)으로 포커스가가는 것처럼 들립니다. 이 사각형이 포커스를 가져야하는 이유가 있습니까? 접근성을 위해?

+0

나는 내가 성취하려는 것을 더 잘 묘사하기 위해 질문을 업데이트했다. 나는 현재 사용자 인터페이스가 매우 유용하고 잘 설계되어 있다고 생각한다. 그러나 메뉴의 포커스가 기본 div가 스크롤되도록하는 사실은 끔찍하며 주위를 해결할 방법이 필요합니다. –

+0

예, 메뉴는 접근성 문제에 초점을 맞춰야하는 앵커 태그 목록입니다. 그런 다음 메뉴가 완전히 보입니다. 그러나 스크롤 가능한 div의 가장자리 근처에서 마우스를 움직이면 브라우저가 스크롤하여 스크롤해야한다고 생각하게됩니다. –

0

당신이 오버 플로우하지 않은 경우 : 스크롤을 대신 당신이 오버 플로우 사용 :을 숨겨 제공이 필요한 경우 사용자가 스크롤 할 수/아래 버튼 스크롤? 물론이 버튼들은 쉽게 비활성화 될 수 있습니다.

+0

오버 플로우가 숨겨진 개체는 여전히 내 상황에 스크롤됩니다. 숨겨진 오버플로로 크기가 작지만 텍스트가 많은 div를 만들어보십시오. 마우스 휠로 해당 상자를 스크롤하거나 텍스트를 선택할 때 클릭하고 드래그 할 수 있습니다. –

+0

당신은 onscroll 이벤트 등()의 Defected()를해야 할 것입니다 : –

+0

그래, 그걸 시도해 보았습니다. 작동하지 않습니다. 그래도 고마워. –

0

찾고있는 대답이 아닐 수도 있지만 페이지로드시 (서버에서) div의 표시 값을 'none'으로 설정 한 다음 페이지로드에 이벤트가 연결되도록하려면 (ajax.net의 pageLoad 또는 javadript를 통해 onload 이벤트에 연결) div 표시를 'block'으로 설정합니다 .. 이렇게하면 느린 브라우저에서 div를 'jumping around'할 수 있습니다 div에있는 '로드 중'이미지로 보이지 않는 것뿐만 아니라 무엇인가를하는 사용자를 보여줌)

죄송합니다. 더 복잡한/유창한 솔루션을 제공하지 못했습니다.

3

내가 허용하려고하는 기능의 프레젠테이션과 관련하여 Anthony와 동의합니다. 스크롤을 사용하지 않으려면 페이지의 해당 부분을 시각적으로 비활성화하거나 제거해야합니다.

그 결과 스크롤 할 수있는 div 위쪽에 반투명 div를 배치 할 수 있습니다.이 div는 마우스 이벤트를 캡처하고 스크롤 가능한 div가 현재 비활성 상태임을 시각적으로 보여줍니다. 브라우저 간 호환이 가능하고 완벽하지는 않겠지 만 클라이언트 측 트릭은 거의 없습니다.

관련 문제