Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   и снова scrollTo (https://javascript.ru/forum/events/34212-i-snova-scrollto.html)

Jeer 24.12.2012 17:07

и снова scrollTo
 
Доброго времени суток!
Не работает scrollTop, может быть кто-то сталкивался, код:

//работает со старой версией jQuery
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>

//не работает с новой версией
//<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>



<script type="text/javascript">
            function myFu() {
                $('#content').append('<p>aaaaaaa</p>');
                $("#content").animate({ scrollTop: $("#content").attr("scrollHeight") - 20 }, 'normal');
                return false;
            }
</script>

        <a href="#" onclick="myFu();">aaaa</a>

<div id="content" style="position: fixed;bottom: 0px; height:250px; bottom: 0px; overflow:auto;border: 1px solid black; width: 99%">
                <p style="padding-bottom:10px;">123</p>
                <p style="padding-bottom:10px;">123</p>
                <p style="padding-bottom:10px;">123</p>
                <p style="padding-bottom:10px;">123</p>
</div>


При нажатии на ссылку добавляется элемент в див и прокручивается вниз. Со старыми версиями jquery это работает, с новыми отказывается.
Во всех рабочих документациях участвуют старые версии jQuery.
Просто на этот див мне нужно навесить еще ресайзабл, а он со старыми версиями не работает, меж двух огней оказался.
Гуру помогите, спасибо.

bushstas 24.12.2012 20:10

попробуй так
<script type="text/javascript">

function myFu() {
$('#inner').append('<p>aaaaaaa</p>');
$("#content").animate({ scrollTop: $('#inner').height() }, 500);

}
</script>

<a href="#" onclick="myFu();return false">aaaa</a>

<div id="content" style="position: fixed;bottom: 0px; height:250px; bottom: 0px; overflow:auto; border: 1px solid black; width: 80%">
<div id="inner">    
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
</div>
</div>

Jeer 24.12.2012 22:01

Специально же подробно написал
//работает со старой версией jQuery
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>

я привел аналогичный рабочий пример. Если подключить новую библиотеку jQuery, например,
//не работает с новой версией
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
,

то не работает. Использование старой библиотеки меня не устраивает, потому что используются вещи, которые не работают со старой версией (например, resizable)

Jeer 24.12.2012 22:04

ОУУ ) нет, это мои криворуки ) действительно, так работает!

bushstas 24.12.2012 22:04

так мой вариант работает в новой версии, разве не это тебе надобно?

Jeer 24.12.2012 22:55

Сорри, так я тоже делал ) рассказываю шаг 2 ) Подключаем ресайзабл элемента. Казалось бы, что всё получилось, наш див ресайзится, при добавлении элемента скроллинг уходит вниз. Но после одного добавления через .append() див перестает ресайзится.
Аналогичный результат я получил в первом посте подключая библиотеку версии
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>

смотрим:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />

function myFu() {
$('#inner').append('<p>aaaaaaa</p>');
$("#content").animate({ scrollTop: $('#inner').height() }, 500);
$("#content").resizable({ animate: true, handles: 'n' });//это должно быть, чтобы после каждого добавления контента оставалась возможность ресайза
}


</script>

<a href="#" onclick="myFu();return false">aaaa</a>

<div id="content" style="position: fixed;bottom: 0px; height:250px; bottom: 0px; overflow:auto; border: 1px solid black; width: 80%">
<div id="inner">    
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
</div>
</div>


<script>
//это чтобы при загрузке работало
$(document).ready(function () {
        $("#content").resizable({ animate: true, handles: 'n' });
    })
</script>

Jeer 25.12.2012 14:31

Разобрался, просто ползунок ресайза уходил вверх, он не пропадал, а надо было перемотать скроллинг вверх, тогда можно было ресайзить. Я обернул все внутренности в еще один див и подставил коррекцию высоты. Всё работает, всем спасибо!
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />

function myFu() {
$('#inner').append('<p>aaaaaaa</p>');
$("#content").animate({ scrollTop: $('#inner').height() }, 500);
$("#content").css("height", "100%");//вот она, рыба моей мечты
}


</script>

<a href="#" onclick="myFu();return false">aaaa</a>

<div id="outer" style="position: fixed;height:250px; bottom: 0px; border: 1px solid black; width: 99%">
<div id="content" style="overflow:auto;border: 1px solid black; width: 100%">
<div id="inner">    
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
<p style="padding-bottom:10px;">123</p>
</div>
</div>
</div>

<script>
//это чтобы при загрузке работало
$(document).ready(function () {
        $("#outer").resizable({ animate: true, handles: 'n' });
    })
</script>


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