Установка <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, время: 14:41. |