Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Прокрутка страницы до id (https://javascript.ru/forum/dom-window/21283-prokrutka-stranicy-do-id.html)

leny 03.09.2011 18:51

Прокрутка страницы до id
 
Доброго времени суток, уважаемы программисты!
Нужно средствами javascript прокрутить страницу до id. Все равно плавная или моментальная прокрутка.
Вот пример кода:

<body>
<!--тут какой-та код -->
<div id="myId">.......</div>
</body>

Подскажите пожалуйста как это реализовать?

Или изменить готовое решение:

var speed=1
var currentpos=0,alt=1,curpos1=0,curpos2=-1

function initialize(){
    startit()
}

function scrollwindow(){
if (document.all)
    temp=document.body.scrollTop
else
    temp=window.pageYOffset
if (alt==0)
        alt=1
else
    alt=0
if (alt==0)
    curpos1=temp
else
    curpos2=temp
if (curpos1!=curpos2){
        currentpos=window.pageYOffset+speed
		window.scroll(0,currentpos)
}
}

function startit(){
    setInterval("scrollwindow()",10)
}
window.onload=initialize


этот код рабочий, но он прокручивает страницу до конца. Вот уже пол дня с ним мучаюсь, меняя вот эту переменную currentpos. Она , как я понял, определяет высоту страницы.

Заранее очень благодарен!

ваый 03.09.2011 19:00

1. Самый простой вариант: location.hash = 'myId';

2. А вот тебе функция, которая принимает элемент и скролит к нему:
function scrollToElement(theElement) {
    var selectedPosX = 0;
    var selectedPosY = 0;
  
    while (theElement != null) {
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }
                        		      
    window.scrollTo(selectedPosX,selectedPosY);
}

leny 03.09.2011 20:25

Спасибо, с первым разобрался, а вот со вторым нет.

Вот что я написал:

function scrollToElement(theElement) {
var selectedPosX = 0;
var selectedPosY = 0;
	   
while (theElement != null) {
selectedPosX += theElement.offsetLeft;
selectedPosY += theElement.offsetTop;
theElement = theElement.offsetParent;
}
                                     
window.scrollTo(selectedPosX,selectedPosY);
}


scrollToElement('myId');


Что не так?

ваый 03.09.2011 20:56

theElement - это DOM element, а не строка

leny 03.09.2011 21:02

без кавычек вставлял тоже не работает, если я правильно вас понял.

melky 03.09.2011 21:06

тогда я дополню функцию. в неё можно передавать ID элемента или элемент.

function scrollToElement(theElement) {
*!*
    if (typeof theElement === "string") theElement = document.getElementById(theElement);
*/!*

    var selectedPosX = 0;
    var selectedPosY = 0;

    while (theElement != null) {
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }

    window.scrollTo(selectedPosX, selectedPosY);
}


scrollToElement('myId'); // теперь это будет работать

ваый 03.09.2011 21:07

зря ты, melky, я хотел, чтоб он немного подумал сам, покопал туториалы..

leny 03.09.2011 21:11

:thanks: работает!!! спасибо большое!!!

melky 03.09.2011 21:13

Цитата:

Сообщение от ваый (Сообщение 124628)
зря ты, melky, я хотел, чтоб он немного подумал сам, покопал туториалы..

ну.. если человеку по работе это необходимо (верстальщег, к примеру.. сомнительный пример), то можно поправить. есть же узкоспециализированные специалисты, да ?)

да и не надо гнать каждого встречного на мануалы :)

вот александра хака можно.. уже 9000-й вопрос задает на форуме. его и надо посылать на мануалы :)

ваый 03.09.2011 21:22

александра хака нужно, да..
на самом деле каждого второго нужно. народ ленив и ничего сам сделать не может. это раздражает. хотя, я просто по себе сужу - никогда не спрашивал ничего, пока сам не сделал все что мог. а тут люди часто просто не тем занимаются. не зная основ, пытаются что-то делать. зачем? вот и сейчас парню совсем немного оставалось додумать, а он не смог сам. позорно? безусловно. потому что его вопрос решается даже простым гуглингом. делов то. а раз он не знает, что такое dom element и отличие его от строки, то это плохо. хотя с другой стороны, может это и в самом деле верстальщик-бедолага, тогда да, я много хочу. но все равно общими усилиями все заканчивается хорошо как правило :)

melky 03.09.2011 21:44

как говорится, люди должны помогать друг другу :) на этом форуме мы почти всё время это и делаем, за исключением интеллектуальных бесед (срача) по поводу оперы, работы, текущего поколения

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

отвечу сам - если вы занимаетесь этим продолжительное время и профессионально, то, несомненно, да. Я, например, просто тащусь от кодинга :)

ваый 03.09.2011 22:12

да, конечно, приходится постоянно искать баги в своем коде, и так как это естественная часть работы программиста, то я научился получать от этого своего рода удовольствие.
и да - на этом форуме да тоже бывает прикольные задачки приходится решать, что здорово, потому что позволяет постоянно обновлять в памяти какие-то моменты. но я все равно больше нравится, когда человек сам больше работает, чем спрашивает. ну а помогать да, нужно, этим мы тут и занимаемся.

serj0110 19.01.2017 06:54

$('#myId').on("click", function() {
	$('html, body').animate({scrollTop: $("#myId").offset().top}, 1000);
});


Часовой пояс GMT +3, время: 17:34.