2016-10-14 6 views
5

Привет, ребята, Прежде всего, если это дубликат, пожалуйста, несите меня, так как любые подобные мне вопросы не были удовлетворены.scrollTop возвращает гораздо меньшее значение для div в firefox

Ссылка Ссылка: http://old.crazyripples.com/?debug=1

Итак, я использую JQuery и плагин JQuery Вся страница. Это помогает мне добиться прокрутки по кадрам.

Теперь для внутренних див, где вертикальная высота больше, чем высота окна я использовал некоторые функции, где я просто проверить на позицию прокрутки и stopPropagation плагиной, так что внутренние прокручивают полосы прокрутки без сдвига рамки.

Все работает отлично с хромом, и поскольку я построил с хромом, я использовал некоторые вычисления, которые я наблюдал на хроме. Но firefox показывает разные результаты, особенно с scrollTop.

Мне известно о том, что разница в высоте может быть разной, но если вы увидите журналы в ссылочной ссылке, вы увидите, что высота почти одинаковая (даже если она не для вас, ее scrollTop значение, которое является проблемой).

Вот код, который я использую, чтобы решить, следует ли прекратитьпрограммирование или нет.

$(document).on("keydown",function(e){ 
 
\t var story=$("#story"), 
 
\t \t story_con=story.find(".container"), 
 
\t \t story_top=story_con.scrollTop(); 
 

 
\t if(story.hasClass("active")){ 
 
\t \t // console.log(story_top,story_con.height(),story_con.innerHeight(),story_con.children("div").height(),story_con.children("div").innerHeight(),e.which); 
 
\t \t console.log("Div ScrollTop: "+story_top, "Container Height: "+story_con.height(), "Container InnerHeeight: "+story_con.innerHeight(),"Conatiner Div Height: "+story_con.children("div").height()); 
 

 
\t \t //up arrow 
 
\t \t if(story_top==0 && e.which==38){ 
 
\t \t \t console.log("prev frame") 
 
\t \t } 
 

 
\t \t //down arrow 
 
\t \t //chrome 280+432 >= 676 i.e. 712>=676 true 
 
\t \t //firefox 207+429 >= 676 i.e 636>=676 false 
 
\t \t else if(story_top + story_con.height() >=story_con.children("div").height() && e.which==40){ 
 
\t \t \t console.log("next frame"); 
 
\t \t } 
 
\t \t else{ 
 
\t \t \t story_con.focus(); 
 
\t \t \t console.log(story_con[0]); 
 
\t \t \t console.log("stopped propagation"); 
 
\t \t \t e.stopImmediatePropagation(); 
 
\t \t } 
 
\t \t return; 
 
\t } 
 
});

И это, как я называю плагин:

$('#main').fullpage({ 
 
\t sectionSelector:'.frame', 
 
\t scrollingSpeed:800, 
 
\t responsiveWidth:1025, 
 
\t normalScrollElements: '#story, #startups, #services', 
 
});

Replication: Перейти к опорному ссылке. Перейдите ко второму разделу (Наша история) с помощью прокрутки, клавиш со стрелками или меню. Теперь используйте клавиши со стрелками, кадр должен прокручиваться в обычном режиме, но когда прокрутка завершена, он должен перейти к следующему кадру (это делается в Chrome). Подробнее см. В журналах js.

Мне бы очень понравилось, если бы кто-нибудь мог мне помочь. Я пытался отлаживать это на некоторое время. Может быть, я сосредотачиваюсь на неправильном вопросе? Любая помощь будет оценена по достоинству.

P.S. Я знаю, что плагин предлагает параметр scrollOverflow. Это вызвало больше проблем, чем этот подход.

Обновление: Поскольку я не смог найти какое-либо решение, поэтому я изменил свой подход к обнаружению, если рамка прокрутки рамки достигла конца. Я использовал это:

//down arrow 
else if(container[0].offsetHeight + container[0].scrollTop >= container[0].scrollHeight){ 
    console.log("next frame"); 
} 
+0

Из-за любопытства, почему вы не использовали функцию scrollOverflow для fullPage.js для создания полос прокрутки как [в этом примере] (http://alvarotrigo.com/fullPage/examples/scrolling.html) ? – Alvaro

+0

Для параметра scrollOverflow требуется внешний файл js. Кроме того, этот вариант не работал стабильно для меня. Возможно, что я использовал flexbox, может быть, и причина. – SuperNOVA

+0

Я бы удостоверился, что у вас нет проблем с сенсорными устройствами с вашим подходом. – Alvaro

ответ

0

* Это начало моего ответа, поскольку я продолжаю отлаживать, чтобы дать вам более подробные сведения.

В настоящее время использование Firefox версии 49.0.1 на размер окна меньше 1280 пикселей, ваш контент внутри ваших классов container слишком высок.

токам: В ваших дивы, #story, #partners и #services, если вы где дать div, что является прямой ребенок div.container в каждом из основных разделов height: 200px все ваши стрелки вниз нажатиями будет работать.

Редактировать 1 В строке magic.js 111 находится ваша проблема.

else if(story_top + story_con.height() >=story_con.children("div").height() && e.which==40){

Содержание внутри каждого из контейнеров, story_con.children("div").height(), иногда больше, чем story_top + story_con.height() поэтому он не перейдет в следующий путь страницы, которые вы хотите.

Конечно, все это зависит от высоты окна.

отладочных каротаж доказать свою точку:

+0

ОК, прежде всего, спасибо за помощь. Теперь я изменил размер окна до 1280, и он отлично работает в хроме. Фактически, он работает на хроме, независимо от размеров. В firefox (той же версии) я установил div.container> div height на 200px, и он работает, но для этого есть простая причина. Для высоты, меньшей, чем окно, не будет присутствовать полоса прокрутки, а условие в строке 111 будет равно true, а следующий кадр будет загружен. – SuperNOVA

+0

Это верно для любой высоты div меньше высоты окна. Теперь линия 111 просто означает, что если клавиша со стрелкой вниз и мы достигли конца положения прокрутки. Все вычисления будут корректно работать, если переменная story_top (scrollTop) приведет к тому же значению, что и хром, а это не так. – SuperNOVA

+0

Хорошо :) Я посмотрю, почему scrollTop отличается от Chrome vs Firefox. –

0

Простой ответ будет, потому что Chrome и Firefox делают страницы по-разному. Чтобы понять, почему вы получаете различия в рендеринге, посмотрите на это Explanation

Я надеюсь, что это очистит.

+0

Я действительно об этом знаю. Но в этом контексте я не знаю, помогает ли это. Прежде всего, я не имею дело с шириной, ее высотой и scrollTop проблемой. Может быть, это может иметь сходство с высотами, но единственная высота, которую я дал, - 100vh, и есть только один ребенок. Даже если я каким-то образом верю, что это настоящая проблема, разница в 5-10 пикселей будет иметь смысл, но если вы увидите журналы, разница в размере 80 пикселей (для меня) в значениях Chrome и Firefox. Итак, я думаю, это не причина. – SuperNOVA