웹 사이트 사용자가 여러 모니터를 사용하고 있는지 여부를 알 수 있습니까? 팝업 위치를 찾아야하지만 사용자가 다중 모니터 설정을 할 가능성이 큽니다. window.screenX
등은 브라우저 창 위치를 알려주지 만 여러 대의 모니터에서는 쓸모가 없습니다.자바 스크립트로 여러 화면 테스트하기
답변
누군가가 사용한 해결책으로 이것을 발견했습니다 ... 보이지 않습니다. 왜 당신은 그것을 믿을 수 없었습니다.
[사용자가 가지고있는 듀얼 모니터]
[최종면]
당신이 할 수있는 [폭은 (높이/3) * 4> (Screen.Width)보다 큰 경우,] 그럴 수 없어. 그러나 부모 창에 팝업을 배치 할 수 있습니다. 귀하의 웹 사이트 중간에 대화 상자로 "div"를 표시하는 것이 더 좋을 것 같습니다. 팝업이 차단되는 기회가 더 적어지고 IMO의 성가심이 덜하기 때문입니다.
화면의 크기는 어떻습니까? 보통 여러 개의 스크린이 있습니다. 크기를 확인하고 하나 이상의 화면에있는 것이 합리적인지 결정하십시오.
자바 스크립트의 screen.width
(.availWidth
) 및 screen.height
(.availHeight
)을 사용하면 잘 교육 된 추측을 할 수 있습니다.
내 생각은 일반적으로 모니터가 특정 비율을 따르는 반면, 화면은 너비가 아니라 높이만 복제되기 때문에 .avail 너비가 바깥에 있어야한다는 가정 (!)입니다.
이 답변을 작성하면 심각한 해킹처럼 들릴 수 있습니다. 나는 정말로 의지하지 않을 것입니다.
이것은 작동하지 않습니다. 'availwith'와'availHeight'는 현재 모니터를 기반으로 알려줍니다. 브라우저 창이 두 번째 모니터에 있으면'availTop'과'availLeft'에서 유추 할 수 있지만 브라우저 창이 기본 모니터에 있으면 두 번째 모니터가 실제로 존재 함을 알 수 없습니다. –
이것은 지나치게 복잡한 해결책입니다. 이 작업을 리팩토링하는 것이 좋습니다. 프로덕션 사이트에는 사용되지 않았으며, 개념의 빠른 증명으로 사용되었습니다.
오른쪽으로주의하십시오.
나는 처음에는 사용자가 듀얼 모니터 설정을하지 않았지만 실제로는 큰 모니터가있어 동일한 기능을 적용 할 수 있다고 가정했습니다.
var newWindow,
screenSpaceLeft = window.screenX,
screenSpaceTop = window.screenY,
screenSpaceRight = screen.availWidth - (window.screenX + window.outerWidth),
screenSpaceBottom = screen.availHeight - (window.screenY + window.outerHeight),
minScreenSpaceSide = 800,
minScreenSpaceTop = 600,
screenMargin = 8,
width = (screen.availWidth/2.05),
height = screen.availHeight,
posX = (screen.availWidth/2),
posY = 0;
e.preventDefault();
if (screenSpaceRight > screenSpaceLeft && screenSpaceRight > screenSpaceTop && screenSpaceRight > screenSpaceBottom && screenSpaceRight > minScreenSpaceSide) {
if (width > screenSpaceRight) {
width = screenSpaceRight - screenMargin;
}
if (posX < (screen.availWidth - screenSpaceRight)) {
posX = window.screenX + window.outerWidth + screenMargin;
}
} else if (screenSpaceLeft > screenSpaceRight && screenSpaceLeft > screenSpaceTop && screenSpaceLeft > screenSpaceBottom && screenSpaceLeft > minScreenSpaceSide) {
if (width > screenSpaceLeft) {
width = screenSpaceLeft - screenMargin;
}
posX = 0;
} else if (screenSpaceTop > screenSpaceRight && screenSpaceTop > screenSpaceLeft && screenSpaceTop > screenSpaceBottom && screenSpaceTop > minScreenSpaceTop) {
posX = 0;
posY = 0;
width = screen.availWidth;
height = (screen.availHeight/2.05);
if (height > screenSpaceTop) {
height = screenSpaceTop - screenMargin;
}
} else if (screenSpaceBottom > screenSpaceRight && screenSpaceBottom > screenSpaceLeft && screenSpaceBottom > screenSpaceTop && screenSpaceBottom > minScreenSpaceTop) {
posX = 0;
width = screen.availWidth;
if (window.screenY + window.outerHeight + screenMargin > (screen.availHeight/2)) {
posY = window.screenY + window.outerHeight + screenMargin;
} else {
posY = (screen.availHeight/2);
}
height = (screen.availHeight/2.05);
if (height > screenSpaceBottom) {
height = screenSpaceBottom - screenMargin;
}
}
newWindow = window.open(this.href, "_blank", "width=" + width + ",height=" + height + ",location=yes,menubar=no,resizable=yes,scrollbars=yes,status=yes,menubar=yes,top=" + posY + ",left=" + posX);
사용 가능한 화면 공간의 양을 확인하고 사용 가능한 경우 최소 크기 (800x600)가 있으면 창이 열립니다. 충분한 공간이 없으면 화면의 오른쪽에 창을 겹쳐서 그 중 절반 정도를 차지합니다.
주 : 공간의 최대 크기는 단지 arbitarily 왼쪽으로 검색, 오른쪽, 위, 아래가 아닌 곳
첫째, 찾아 변경해야합니다.
둘째로, 나는 screen.availHeight가 사용 된 곳에서 screen.height가 대신 사용해야한다고 생각합니다. 폭과 마찬가지로. 이는 사용자가 두 번째 모니터를 가지고 있는지 또는 화면에 많은 공간이 있는지를 결정할 때 작업 표시 줄의 위치에 지나치게 관심이 없기 때문입니다.
세 번째로 IE < 8에서 작동하지 않습니다. 적절한 경우 화면 X/화면 Y 대신 화면 왼쪽과 위쪽을 사용하여 쉽게 수정할 수 있습니다.
넷째, 코드가 엉망이며 훨씬 더 우아 해 보일 수 있습니다. 나는 이것을 사과하지 않는다. 그러나, 당신은 그런 끔찍한, unmaintainable JS를 어디에서든지 사용하면 안되며 NEEDS을 다시 써야합니다. 나는 그것이 지금 생각의 기차에 있기 때문에 여기에만 놓았고 몇 달 동안 제대로되지 않을 것이므로이 글을 올바르게 쓸 때 여기서 좋은 해결책을 게시하는 것을 잊어 버릴 것입니다.
오른쪽. 됐어. 나는 당신의 javascript를 무서운, 추악하고 솔직하게 만드는 일에 아무런 책임을지지 않습니다. :)
- 1. 자바 스크립트로
- 2. 플래시 전체 화면 모드를 감지하고 자바 스크립트로 이탈하는 방법
- 3. 파이어 폭스 부가 기능이있는 자바 스크립트로 전체 화면 모드 전환
- 4. 자바 스크립트로 새 페이지로 이동하고 메뉴/전체 화면 사용 안함
- 5. 자바 스크립트로 웹 브라우저를 전체 화면 모드로 전환하는 방법은 무엇입니까?
- 6. 자바 스크립트로 PDF 인쇄
- 7. NUnit, 여러 문화에 대해 테스트하기
- 8. PHPUnit을 사용하여 여러 클래스 테스트하기
- 9. Capybara로 자바 스크립트 경고 테스트하기
- 10. 자바 스크립트로 div의 여백 변경하기
- 11. 자바 스크립트로 자바 스크립트를 동적으로로드하십시오.
- 12. 자바 애플릿을 자바 스크립트로 죽여라.
- 13. 난 정말 자바 스크립트로 엉망이있어
- 14. 자바 스크립트로 다시 센터
- 15. 이미지를 자바 스크립트로 생성했습니다.
- 16. 자바 스크립트로 플래시 생성
- 17. 자바 스크립트로 데이터 요청하기
- 18. 자바 스크립트로 F11 시뮬레이션
- 19. 자바 스크립트로 양식 작성
- 20. 자바 스크립트로 도형 그리기
- 21. 자바 스크립트로 플래시 다시로드
- 22. 자바 스크립트로 깊은 상속?
- 23. 자바 스크립트로 폴더 체크인
- 24. 자바 스크립트로 텍스트 회전
- 25. 자바 스크립트로 날짜 계산
- 26. 자바 스크립트로 스크롤바 만들기
- 27. 자바 스크립트로 이미지 회전
- 28. 자바 스크립트로 링크 에뮬레이션
- 29. 자바 스크립트로 눈금 그리기
- 30. 자바 스크립트로 파일 생성
팝업. 그러나 절대적으로 * 사용해야한다면 절대 좌표를 사용하지 마십시오. – Shog9
@ Shog9 안녕하세요, 새로운 팝업을 열 때 절대 좌표를 사용해서는 안되는 이유를 명확히 설명해 주시겠습니까? 그것은 나를 위해 매우 도움이 될 것입니다. – Vadim
아마도 완전히 별개의 질문 인 @ Vadim에 적합한 주제 일 것입니다. 그러나 짧은 대답은 당신이 나에게 불편한 곳에서 팝업 위치를 정할 수있는 합리적인 기회가 있다는 것입니다. 내 보조 모니터의 오른쪽 절반에 브라우저 창이 열려있어 내 기본 모니터보다 크고 오른쪽에 위치합니다. 이것을 고려하지 않으면 팝업을 다른 앱이나 화면을 벗어나게 할 수있는 아주 좋은 기회입니다. – Shog9