【发布时间】:2013-04-13 06:57:25
【问题描述】:
背景:
我正在尝试创建一个系统,允许使用鼠标向上滚动和鼠标向下滚动来滚动浏览一种地图,如下所示:
-------
| |
| 1 |
| |
-------
------- ------- ------- -------
| | | | | | | |
| 2 | | 3 | | 4 | | 5 |
| | | | | | | |
------- ------- ------- -------
-------
| |
| 6 |
| |
-------
上面的每个框都在 javascript 中重置为浏览器的高度和宽度。当您上下滚动鼠标时,浏览器将滚动到地图中的相同位置,从 div 1 开始,然后是 2,依此类推。这个位置是通过我的滚动功能设置的,它会监听鼠标滚动并在顶部添加适当的填充,在左侧添加边距以创建上面地图的错觉。
这是它的代码:
http://codepen.io/lorenzoi/pen/mxejJ
这里是它的 javascript:
$(function(){
$(window).on('resize', function(){
var $divs = $('.vertical, .horizontal > div'),
ww = $(this).width(),
wh = $(this).height();
$divs.css({
height : wh,
width : ww
});
$('.horizontal').each(function(){
var $container = $(this),
nbChildren = $container.children().length;
posY = $container.offset().top,
$container.css({
height: ww*(nbChildren-1) + wh,
width: ww*(nbChildren)
});
});
}).trigger('resize');
$(window).on('scroll', function(){
var wh = $(window).height(),
scroolTop = $(window).scrollTop();
$('.horizontal').each(function(){
var $container = $(this),
posY = $container.offset().top,
height = $container.height(),
nbChildren = $container.children().length,
marginMax = $container.width()/nbChildren*(nbChildren-1),
marginL = scroolTop - posY;
if(marginL<0) marginL = 0;
else if (marginL>marginMax) marginL = marginMax;
$container.css('marginLeft', -marginL);
$container.css('paddingTop', marginL);
});
}).trigger('scroll');
});
问题:
调整窗口大小会创建一个奇怪的 div 偏移量,当为 div 2 到 5 调用滚动函数时,它会自行修复。在这些 div 中调整大小时,它们似乎会自行偏移,然后只有在调用滚动函数时才会修复。
.trigger('resize');应该总是被调用,是吗?我不知道为什么它只在创建滚动功能时才被调用。
如何解决这个问题?
【问题讨论】:
-
去抖可能是你在github.com/cowboy/jquery-throttle-debounce之后的样子
-
resize 事件被正确调用。问题在于您的代码,而不是调度。
标签: javascript jquery resize window dom-manipulation