Установка <div> в заданную позицию.
У меня на странице есть DIV с прокруткой, внутри которого находится GridView. Прокручивая див, я останавливаюсь в определенном положении прокрутки, потом перезагружаю страницу и позиция "убегает" на начало. Как сделать, чтобы между перезагрузками страницы положение сохранялось?
|
Сохраняйте положение внутреннего дива в cookies, при загрузке страницы считывайте значение и востанавливайте положение дива.
|
Цитата:
Вопрос в другом - как считать положение дива? И как потом установить в то же положение, имея сохраненную величину. |
// перед загрузкой существующей страницы window.onbeforeunload = function(){ // получаете координаты div var dixX = ... var divY = ... // там будут строки.. я про значения localStorage.setItem("divX", divX); localStorage.setItem("divY", divY); }; // после загрузки страницы window.onload = function(){ // получаем из хранилища и преобразуем в числа var divX = +localStorage.getItem("divX"); var divY = +localStorage.getItem("divY"); // потом устанавливаете стиль if( divX && divY ) mydiv.setStyle(...); }; |
Цитата:
Что должно быть вместо трех точек ... , как считать в переменные нужные мне координаты? |
что используете ? jq ?
|
Цитата:
|
Цитата:
|
Цитата:
По крайней мере. старше jq |
Цитата:
|
Цитата:
4 декабря 1995 года LiveScript переименовали в JavaScript[14], получив соответствующую лицензию у Sun. Анонс JavaScript со стороны представителей Netscape и Sun состоялся накануне выпуска второй бета-версии Netscape Navigator[11]. Ну и кто старше? |
Цитата:
|
Цитата:
А когда я давал выписки из Википедии, то тоже имел ввиду лишь годы разработки продукта, а не то, является ли он библиотекой, скриптовым языком, языком программирования, или вообще, скажем, самолетом. Да и основной мой вопрос все же был другой вообще. Меня интересовало как получить, а после перезагрузки восстановить координаты GridView, сидящего внутри Div-a. |
Цитата:
Цитата:
кстати, код можно было и нагуглить(это не мой код): function getAbsolutePos(el) { var r = { x: el.offsetLeft, y: el.offsetTop }; if (el.offsetParent) { var tmp = getAbsolutePos(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; } или вот еще var el = document.getElementById('login'); var x = findPosX(el); var y = findPosY(el); function findPosX(obj) { var curleft = 0; if (obj.offsetParent) { while (1) { curleft+=obj.offsetLeft; if (!obj.offsetParent) { break; } obj=obj.offsetParent; } } else if (obj.x) { curleft+=obj.x; } return curleft; } function findPosY(obj) { var curtop = 0; if (obj.offsetParent) { while (1) { curtop+=obj.offsetTop; if (!obj.offsetParent) { break; } obj=obj.offsetParent; } } else if (obj.y) { curtop+=obj.y; } return curtop; } а вот пример и статья от этого сайта |
Спасибо!
Гуглить - это конечно хорошо. Но для чего тогда форумы? |
чтобы спросить то, что неясно в теории (замыкания, zum Beispiel )
или потроллить кого... или за отсылкой к гуглу :) ... вообще, как вы заметили, в последней строчке моего поста написано, что сабж уже решён Ильёй (статья написана им точно), так что следовало бы сначала проследовать в поиск по этому сайту. |
Цитата:
Вот теперь сижу разбираюсь. К сожалению, не могу пошагово проходить функцию в javascript, а пользоваться все время алертами, а потом убирать их - забодался. |
Цитата:
console.log() ? debugger ? |
debugger я поставил давно. Но на нем не останавливается почему-то.
Зашел Internet Options в advanced и там убрал птичку на Disable Debugging - тоже не сработало. |
firebug в этом плане намного удобнее.
и дебаггер там есть попробуйте |
Цитата:
Код:
function findPosY(obj) { |
Цитата:
|
Цитата:
if (obj.offsetParent) Потому что сразу ни в if, ни в else алерты уже не срабатывают. Как можно исправить? |
if (obj && obj.offsetParent) { } else if (obj && obj.y) { } |
function findPosY(obj) { if ( !obj ) return 0; var curtop = 0; if ( obj.offsetParent ) { while (1) { curtop += obj.offsetTop; if ( !( obj = obj.offsetParent ) ) { break; } } } else if ( obj.y ) { curtop += obj.y; } return curtop; } |
Цитата:
|
Цитата:
|
Цитата:
Но ничего до сих пор не работает. Если я делаю div, а внутри него GridView, то вообще не работает. Если я делаю div, а внутри него еще div (с именем DivIn), а уж в нем GridView, то тогда координату Y я получаю. Но независимо от положения скролла самого наружного дива, результат в любом случае одно и то же число. |
Цитата:
|
Цитата:
|
В этой теме началось не то что велосипедостроение, а уже какое то Шаттло-строение.
HTML: <body> <div id="wrapper"> <div id="content"> <!-- Здесь очень большой текст --> </div> </div> </body> CSS: #wrapper{ height:400px; overflow:hidden; overflow-y:scroll} javascript: // Срипт запустится после загрузки документа window.onload = function () { // Получаем ссылки на DOM-элементы var wrapper = document.getElementById('wrapper'); // Возможно пользователь уже заходил на страницу. Проверим есть ли данные насчет скролла. // Данные хранятся в localStorage var dataScroll = localStorage.getItem('dataScroll'); // Если данных нет то присвоем переменной dataScroll ноль if (dataScroll == undefined){ dataScroll = 0; } // Установим скролл в нужную позицию wrapper.scrollTop = dataScroll; // Теперь нужно слушать событие onScroll и заносить данные о положении скролла // в локальную базу wrapper.onscroll = function () { localStorage.setItem('dataScroll', wrapper.scrollTop); } // Вуаля, и не нужно ломать себе и другим мозг вычисляя положение сферического коня в вакууме. } Посмотреть пример P.S. В некоторых браузерах localStorage локально не работает. |
Цитата:
Осталось только решить основную задачу. А она никак не хочет выдавать мне координаты внутреннего дива. |
Часовой пояс GMT +3, время: 05:49. |