Предыстория:
Я пытаюсь создать систему, которая позволяет прокручивать карту с помощью прокрутки мыши вверх и прокрутки мыши вниз, например:
-------
| |
| 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, которое устраняется при вызове функции прокрутки для блоков 2–5. При изменении размера в этих блоках кажется, что они смещаются сами по себе, а затем фиксируются только при вызове функции прокрутки.
.trigger ('изменить размер'); всегда надо называть, да? Я не знаю, почему он вызывается только при выполнении функции прокрутки.
Как это исправить?