igg*_*012 6 javascript jquery resize window dom-manipulation
的背景:
我正在尝试创建一个系统,允许使用鼠标向上滚动滚动浏览一种地图,鼠标向下滚动,如下所示:
-------
| |
| 1 |
| |
-------
------- ------- ------- -------
| | | | | | | |
| 2 | | 3 | | 4 | | 5 |
| | | | | | | |
------- ------- ------- -------
-------
| |
| 6 |
| |
-------
Run Code Online (Sandbox Code Playgroud)
上面的每个框都在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');
});
Run Code Online (Sandbox Code Playgroud)
问题:
调整窗口大小会创建一个奇怪的div偏移,当div为2到5调用scroll函数时,它会自行修复.在这些div中调整大小时,它们似乎会自行偏移,然后只有在调用scroll函数时才会修复.
.trigger( '调整'); 应该永远被叫,是吗?我不知道为什么它只在滚动功能被调用时被调用.
如何解决这个问题?
使用计时器就足够了:
$(function(){
var timeoutResize;
$(window).on('resize', function(){
clearTimeout(timeoutResize);
timeoutResize = setTimeout(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)
});
});
},100);
}).trigger('resize');
...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |