Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать, чтобы span или div исчезали и появлялись плавно? (https://javascript.ru/forum/misc/13330-kak-sdelat-chtoby-span-ili-div-ischezali-i-poyavlyalis-plavno.html)

Бобр 26.11.2010 13:54

Как сделать, чтобы span или div исчезали и появлялись плавно?
 
Как сделать, чтобы span или div исчезали и появлялись плавно?

Обычно делается так:
style.display = 'none';

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

monolithed 26.11.2010 14:05

Можно, как пример на jQuery

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<a href="#">click</a>
<div style="background: blue; width: 200px; height: 50px;"></div>

<script>
$('a').click(function() {
  $('div').fadeToggle('slow', 'linear');
});
</script>

Бобр 26.11.2010 14:16

А можно без джиКвэри?

monolithed 26.11.2010 14:25

Цитата:

Сообщение от Бобр
А можно без джиКвэри?

Лично у меня нет лишних полчаса

exec 26.11.2010 15:24

http://studioad.ru/blog/2009-04-16-66

dmitriymar 26.11.2010 18:27

а можно и по другому. накрыть сверху див другим дивом. и плавно менять его его свойсво css от прозрачного до основного цвета сайта)

ksa 26.11.2010 21:54

Цитата:

Сообщение от dmitriymar
накрыть сверху див другим дивом. и плавно менять его его свойсво css

Что мешает менять эти свойства у самого элемента без всяких "накрытий"?

dmitriymar 26.11.2010 22:02

ну мона и так. только смотря ведь какой элемент плавно скрывать и открывать.хотя ты прав и я прав))

Бобр 26.11.2010 23:22

Я имел в виду не уменьшение прозрачности, а уменьшение размеров блока. Можно каким-то параметром плавно уменьшать его размеры, там ставить 90% от оригинальной высоты, потом 80% и так далее?

dmitriymar 26.11.2010 23:37

ну и что сложного?)))

parObjp=document.getElementById(id diva);
parObjp.style.position="absolute";
for (x=100;x>0;x--){
for (y=100;y>0;y--){

parObjp.style.height=y+"px";
parObjp.style.width=x+"px";
}
}

dmitriymar 26.11.2010 23:39

или вместо пикселов в % задавайсразу бы написал что нужно изменение размеров а не изменение видимости. да и сразу ты задал тон на видимость

Бобр 27.11.2010 00:18

Цитата:

Сообщение от dmitriymar
ну и что сложного?)))

parObjp=document.getElementById(id diva);
parObjp.style.position="absolute";
for (x=100;x>0;x--){
for (y=100;y>0;y--){

parObjp.style.height=y+"px";
parObjp.style.width=x+"px";
}
}

parObjp.style.position="absolute"; - срабатывает, а parObjp.style.height=y+"px"; - нет.

Бобр 27.11.2010 00:30

И потом как узнать начальное значение parObjp.style.height ?

И как сделать, чтобы не мгновенно исчезало, а с задержкой?

dmitriymar 27.11.2010 09:01

толи лыжи толи я.......а размеры контейнера изначально не заданны?узнать по тому же принципу var y=parObjp.style.height;
мож стоит хоть чуть основы языка подучить? а не копирывать чьито примеры и чуть изменять? ну а код рабочий-им я у себя на сайте изменяю размеры контейнера.задержка-ну сделай через таймер ,ну введи пустые циклы,ну измени приращивание в цикле

exec 27.11.2010 11:51

parObjp=document.getElementById(id diva);
parObjp.style.position="absolute";
for (x=100;x>0;x--){
for (y=100;y>0;y--){

parObjp.style.height=y+"px";
parObjp.style.width=x+"px";
}
}


Изменения наступят сразу. Кроме того, значение height будет скакать от ста до нуля 100 раз подряд. В-общем, бред какой-то.

dmitriymar 27.11.2010 16:50

положил варианты изменения по х и y.если человек не понимает как вложенные циклы работают-то может человеку стоит начать с основ програмирования. замедлить ну дак 3 варианта класики-вложенный пустой цикл. приращивание не 1 а доли 1(будет зависить от мощьности компа слиента скорость) или через таймер это организовать( ни от чего не зависит) код рабочий в смысле что модель parObjp.style.height=y+"px"; parObjp.style.width=x+"px"; рабочая . а код за него писать я не и не собирался.или мне за него ещё и думать?

exec 27.11.2010 19:07

Ну написал бред — ничего страшного, зачем так расстраиваться.

dmitriymar 27.11.2010 20:26

подколол)))чего эт бред написал? ну вложил циклы друг в друга а не разнёс-сам будтобы иногда не тупиш. а в чём остальном бред ?))) сам то с какого раза просёк что я циклы вложил друг в друга?))

monolithed 28.11.2010 00:10

Цитата:

Сообщение от dmitriymar
подколол)))чего эт бред написал? ну вложил циклы друг в друга а не разнёс-сам будтобы иногда не тупиш. а в чём остальном бред ?))) сам то с какого раза просёк что я циклы вложил друг в друга?))

Как пример на скорую руку:
<script type="text/javascript">
window.onload = function(){
    var elem = document.getElementsByTagName('div')[0], i = 0, j = 0, s = 100;   
    document.getElementsByTagName('a')[0].onclick = function(){
        if(++i<=s){
            elem.style.height = i +'px';
            j = i;
            if(j>=s) {
                return false;
            }
        }
        else {
            elem.style.height = --j +'px';
            if(j<=0){
                i = 0;
                return false;
            }
        }
        window.setTimeout(arguments.callee, 10);
        return false;
    };
};
</script>

<a href="#">click<a/>
<div style="background: #0095FF; overflow: hidden; width: 200px; height: 0px; ">Text</div>

Бобр 28.11.2010 04:16

Цитата:

Сообщение от monolithed
if(++i<=100){

Почему 100? Как узнать настоящий размер произвольного блока?

рони 28.11.2010 08:04

На всякий случай )))
Цитата:

Сообщение от monolithed
<a href="#">click<a/>

Цитата:

Сообщение от Бобр
Как узнать настоящий размер произвольного блока?

Вариант открытия блока на величину его содержимого...
<script type="text/javascript">
window.onload = function () {
    var a = document.getElementsByTagName("div")[0],
        b = 0,
        c = ["Text1", "Text2<br />Text2", "Text3<br />Text3<br />Text3"];
    document.getElementsByTagName("a")[0].onclick = function () {
        a.style.overflow = "hidden";
        a.style.height = "";
        a.style.display = "";
        var d = a.offsetHeight;
        if (b < d) {
            a.style.height = "0px";
            window.setTimeout(function () {
                if (++b <= d) {
                    a.style.height = b + "px";
                    window.setTimeout(arguments.callee, 10)
                }
            }, 10);
        return false;
        }
      if(  b >= d ){window.setTimeout(function () {
            if (--b >= 0) {
                a.style.height = b + "px";
                window.setTimeout(arguments.callee, 10)
            } else {
                b = 0;
                a.style.display = "none";
                c.push(c.shift());
                a.innerHTML = c[0]
            }
        }, 10);return false;}

    }
};
</script>
<a href="#">click</a>
<div style="background: #0095FF; width: 200px; display: none">Text1</div>

dmitriymar 28.11.2010 08:40

var y=parObjp.style.height;

Kolyaj 28.11.2010 09:24

Цитата:

Сообщение от dmitriymar
var y=parObjp.style.height;

Это не будет работать.
А тексты ваши читать невозможно. Куча скобок посреди текста, предложения не с заглавной буквы.

dmitriymar 28.11.2010 09:29

конечно не будет -если будет написанна всего эта одна строка. но этой стороки более чем достаточно чтобы понять какая строка должна перед ней стоять чтобы всё работало

Kolyaj 28.11.2010 09:44

Это выражение не даёт высоту элемента. Так понятней?

monolithed 28.11.2010 09:52

Цитата:

Сообщение от Бобр
Почему 100? Как узнать настоящий размер произвольного блока?

http://javascript.ru/blog/Andrej-Par...tcomputedstyle

+offsetWidth/offsetHeight

ksa 28.11.2010 12:39

Цитата:

Сообщение от Бобр
Как узнать настоящий размер произвольного блока?

Как вариант...

<DIV ID=oDiv STYLE="overflow:scroll; width:200; height:100"> . . . </DIV>
<BUTTON onclick="alert(oDiv.clientWidth)">client width</BUTTON>
<BUTTON onclick="alert(oDiv.offsetWidth)">offset widthY</BUTTON>


P.S.
Пример из MSDN... :)

lancer 07.12.2010 10:02

Про fade и самопис известно и возможно, и вот даже пример
http://neoprizma.net/demo/jquery/fading/jquery.html. Копался и на Jquery.com и тут, но не нашел исчезновение с пролетом вверх. Буду признателен.

Бобр 15.02.2011 03:13

Цитата:

Сообщение от ksa (Сообщение 81160)
Как вариант...

<DIV ID=oDiv STYLE="overflow:scroll; width:200; height:100"> . . . </DIV>
<BUTTON onclick="alert(oDiv.clientWidth)">client width</BUTTON>
<BUTTON onclick="alert(oDiv.offsetWidth)">offset widthY</BUTTON>


P.S.
Пример из MSDN... :)

Это работает только в том случае, если в Style заранее прописано значение height. Если же его нет, то возвращает вместо цифры "undefined".

Я так и не нашёл тогда ответ на вопрос как узнать высоту произвольного блока. Удалось ли кому-нибудь найти ответ на этот страшно сложный вопрос?

ksa 15.02.2011 09:22

Цитата:

Сообщение от Бобр
Удалось ли кому-нибудь найти ответ на этот страшно сложный вопрос?

На этом форуме валом таких примеров... :)
http://javascript.ru/forum/css-html-...sota-diva.html

Бобр 15.02.2011 19:44

Цитата:

Сообщение от ksa (Сообщение 92544)
На этом форуме валом таких примеров... :)
http://javascript.ru/forum/css-html-...sota-diva.html

Значение в offsetHeight равно "undefinded".

Не надо нам вала неработающих примеров, дайте всего ОДИН, но РАБОТАЮЩИЙ.


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