我写了一个带有叠加的弹出窗口(与通常的图片显示器不同),用户点击该窗口,并且覆盖图覆盖了用于显示的大图片的屏幕。
问题是,当用户点击“关闭”时,我的功能会淡化图片并覆盖,然后将其删除。当我调用.remove()
函数时,浏览器会关注正文标记并滚动到页面顶部。
我尝试通过捕获offset.top
co-ords并将它们存储在用户点击的元素的属性中,以及弹出窗口关闭时和。remove()
之后的方法进行解决。函数已被调用,我使用scrollTo()
函数返回正确的滚动位置(由于某种原因,将元素过冲并将元素滚动到顶部)。
/*creating the popup layer and picture*/
function newsPopup(obj){
/***PART ZERO - get the timestamp value of this ***/
var itemID = $(obj).attr('itemID');
var storyNumber = $(obj).attr('storyNumber');
/*adding the identifier for later*/
var offset = $(obj).offset();
var roundedOff = Math.round(offset.top);
$(obj).attr('scrollMeBack', roundedOff);
/*** the script then continues to create an overlay and picture popup
}
/*function to remove popup*/
function overlayRemove(){
//first fade out the cover and the container
$("#NEWS_overlay").fadeOut();
$("#NEWS_centeringContainer").fadeOut();
//then remove it from the page completely
setTimeout('$("#NEWS_overlay").remove();$("#NEWS_centeringContainer").remove();',400);
/*value to scroll the element back to*/
var scrollBack = $('[SpringCMSscrollMeBack]').attr('SpringCMSscrollMeBack');
setTimeout('$(window).scrollTop('+scrollBack+')',401); /*notes the 1 millisecond delay here to mean the scroll ahppen after the item has been removed.*/
$('[scrollMeBack]').removeAttr('scrollMeBack');
}
为什么.remove()
函数会导致跳转到页面顶部?即使使用scrollTo
工作,它看起来很邋in,因为这些东西会逐渐消失,但会跳到屏幕顶部然后再回到相关元素。
答案 0 :(得分:7)
见How can I remove the location hash without causing the page to scroll? ;
或者,您可以return false;
停止此行为......