[jquery] fancybox2 / fancybox로 인해 페이지가 맨 위로 이동합니다.
개발 사이트에 fancybox2를 구현했습니다.
내가 fancybox를 사용하면 (링크 클릭 등) 전체 html이 그 뒤로 이동하고 맨 위로 이동합니다. 다른 데모에서는 제대로 작동하지만 동일한 코드를이 프로젝트로 드래그하면 맨 위로 이동합니다. 인라인 div에 대한 링크뿐만 아니라 간단한 이미지 갤러리에도 사용할 수 있습니다.
누구든지 이것을 경험 했습니까?
답변
이것은 실제로 Fancybox 2의 도우미로 수행 할 수 있습니다.
$('.image').fancybox({
helpers: {
overlay: {
locked: false
}
}
});
http://davekiss.com/prevent-fancybox-from-jumping-to-the-top-of-the-page/
답변
Jordanj77은 정확하지만 가장 쉬운 해결책은 스타일 시트로 이동하여 섹션에 jquery.fancybox.css
있는 행을 주석 처리하는 것 overflow: hidden !important;
입니다..fancybox-lock
답변
나는 이것이 오래된 질문이라는 것을 알고 있지만 그것에 대한 좋은 해결책을 찾은 것 같습니다. 문제는 멋진 상자가 브라우저 스크롤바를 숨기기 위해 본문의 오버플로 값을 변경한다는 것입니다.
Dave Kiss가 지적했듯이 다음 매개 변수를 추가하여 팬시 박스가 이렇게하는 것을 막을 수 있습니다.
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
}
});
하지만 이제 멋진 상자 창을 보면서 메인 페이지를 스크롤 할 수 있습니다. 페이지 맨 위로 점프하는 것보다 낫지 만 우리가 정말로 원하는 것은 아닐 것입니다.
다음 매개 변수를 추가하여 올바른 스크롤을 방지 할 수 있습니다.
$('.image').fancybox({
padding: 0,
helpers: {
overlay: {
locked: false
}
},
'beforeLoad': function(){
disable_scroll();
},
'afterClose': function(){
enable_scroll();
}
});
그리고 galambalaz에서 이러한 기능을 추가하십시오. 참조 : 스크롤링을 일시적으로 비활성화하는 방법?
var keys = [37, 38, 39, 40];
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
function keydown(e) {
for (var i = keys.length; i--;) {
if (e.keyCode === keys[i]) {
preventDefault(e);
return;
}
}
}
function wheel(e) {
preventDefault(e);
}
function disable_scroll() {
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
document.onkeydown = keydown;
}
function enable_scroll() {
if (window.removeEventListener) {
window.removeEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
}
답변
문제는 fancyBox가 브라우저 스크롤바를 숨기기 위해 본문의 오버플로 값을 변경한다는 것입니다. 이 동작을 전환하는 옵션을 찾을 수 없습니다.
이를 방지하기 위해 fancyBox 코드의이 섹션을 제거 할 수 있습니다.
if (obj.locked) {
this.el.addClass('fancybox-lock');
if (this.margin !== false) {
$('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth);
}
}
답변
사실,이 문제를 해결하는 올바른 방법은 fancybox가 제공하는 옵션을 사용하는 것이므로 ( 이 답변 참조 ) CSS를 사용하여 문제를 해결할 수 있습니다. 라이브러리의 css 파일을 편집 할 필요가 없습니다. 다음을 애플리케이션의 기본 스타일 시트에 추가하기 만하면됩니다.
html.fancybox-lock {
overflow: visible !important;
}
이 코드는 요소의 원래 오버플로를 재설정합니다. 문제는 요소 overflow: hidden;
의 스크롤바 를 숨기고 <html>
페이지가 맨 위로 “점프”하게 만드는 것입니다. 스크롤바의 위치를 유지하기 위해 오버플로를 다음과 같이 덮어 씁니다.overflow: visible;
답변
이것은 또한 도움이되었습니다
.fancybox-lock body {
overflow: visible !important;
}
답변
받아 들여지는 대답은 실제로 문제를 해결하지 못하기 때문에 완전하지 않습니다. 다음은 창 점프 문제를 해결하는 동안 원하는 기능을 실제로 제공하는보다 완전한 답변입니다.
$('.fancybox').fancybox({
helpers: {
overlay: {
locked: false
}
},
beforeShow:function(){
$('html').css('overflowX', 'visible');
$('body').css('overflowY', 'hidden');
},
afterClose:function(){
$('html').css('overflowX', 'hidden');
$('body').css('overflowY', 'visible');
}
});