Итак, я динамически добавляю панель «боковой навигации» с использованием JavaScript. У него есть круги, которые при нажатии будут перенесены на определенную DIV на странице. По какой-то причине это не прокрутка к правильному div.JavaScript scrollTop прокрутка к ошибке div
Например, у меня есть div Circle1, который при нажатии на него должен находиться пользователь в верхней части страницы. НО, он берет пользователя в div A (который должен быть прокручен до щелчка Circle2).
В принципе, каждая функция OnClick для каждого из моих кругов выключен на 1. Вот JSFiddle продемонстрировать: http://jsfiddle.net/zu6516eu/9/
Есть идеи? Благодаря
document.getElementById('Circle1').onclick = function() {
scrollToTop();
};
Полный код
var offset = 0;
//initialize side nav bar
jQuery(document).ready(function() {
var SideBar = document.createElement("Div");
SideBar.setAttribute("id", "SideBarNav");
SideBar.style.color = "white";
SideBar.style.display = "inline-block";
SideBar.style.position = "fixed";
SideBar.style.top = "50%";
SideBar.style.right = "0";
SideBar.style.transform = "translate(-50%, -50%)";
SideBar.style.textAlign = "center";
SideBar.style.border = "2px solid rgba(0, 0, 255, 0.5)";
var Circle1 = document.createElement("Div");
Circle1.innerHTML = "•";
Circle1.setAttribute("id", "Circle1");
Circle1.style.textAlign = "center";
Circle1.style.fontSize = "3.5em";
Circle1.style.margin = "0 auto";
Circle1.style.opacity = ".7";
Circle1.style.color = "blue";
Circle1.style.lineHeight = ".5em";
var Circle2 = document.createElement("Div");
Circle2.innerHTML = "•";
Circle2.setAttribute("id", "Circle2");
Circle2.style.textAlign = "center";
Circle2.style.fontSize = "3.5em";
Circle2.style.margin = "0 auto";
Circle2.style.opacity = ".1";
Circle2.style.color = "blue";
Circle2.style.lineHeight = ".5em";
var Circle3 = document.createElement("Div");
Circle3.innerHTML = "•";
Circle3.setAttribute("id", "Circle3");
Circle3.style.textAlign = "center";
Circle3.style.fontSize = "3.5em";
Circle3.style.margin = "0 auto";
Circle3.style.opacity = ".1";
Circle3.style.color = "blue";
Circle3.style.lineHeight = ".5em";
var Circle4 = document.createElement("Div");
Circle4.innerHTML = "•";
Circle4.setAttribute("id", "Circle4");
Circle4.style.textAlign = "center";
Circle4.style.fontSize = "3.5em";
Circle4.style.margin = "0 auto";
Circle4.style.opacity = ".1";
Circle4.style.color = "blue";
Circle4.style.lineHeight = ".5em";
SideBar.appendChild(Circle1);
SideBar.appendChild(Circle2);
SideBar.appendChild(Circle3);
SideBar.appendChild(Circle4);
document.body.appendChild(SideBar);
document.getElementById('Circle1').onclick = function() {
scrollToTop();
};
document.getElementById('Circle2').onclick = function() {
scrollFunction(A);
};
document.getElementById('Circle3').onclick = function() {
scrollFunction(B);
};
document.getElementById('Circle4').onclick = function() {
scrollFunction(C);
};
offset = jQuery(".row.span_24").height();
console.log(offset);
});
function scrollFunction(targetString) {
var target = jQuery(targetString);
if (target.length) {
console.log(offset);
var top = target.offset().top - offset;
jQuery('html, body').animate({
scrollTop: $(target).offset().top - 15
}, 'slow');
return false;
}
}
function scrollToTop() {
jQuery('html, body').animate({
scrollTop: 0
}, 'slow');
}
я понял, что высота строки: .5em; это заставляло разбойничать. вот сценарий без линейной высоты: http://jsfiddle.net/zu6516eu/15/. Каков наилучший способ сократить промежутки между ними? Большое спасибо – Harry
@Harry см. Мой обновленный ответ/скрипку - проблема была больше в использовании огромного размера шрифта для пуль. Использование этого метода означает, что вы не пытаетесь снова сделать что-то маленькое - оно просто отображается как должно быть –
Спасибо. Я проверю это. Будет ли более простой способ реализовать все это, чтобы избежать этой проблемы? – Harry