Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Исчезающие меню, как сделать стандартными методами? (https://javascript.ru/forum/misc/36183-ischezayushhie-menyu-kak-sdelat-standartnymi-metodami.html)

Astrey 06.03.2013 16:39

Исчезающие меню, как сделать стандартными методами?
 
Хочу сделать вот что: Выпадающие меню - так, что бы каждая последующая строка появлялась через определенный интервал, но со стандартными методами setInterval, setTimeout не чего не вышло (возможно я не правильно подошел к решению задачи). Попробовал сделать так: бесконечный цикл обрывается через секунду работы, и по окончанию исчезает один элемент. Это работает только с одним элементом. Если сделать с большим числом элементов - компьютер зависает и исчезают сразу все строки. Вопрос: Возможно ли решить эту задачу стандартными методами (бес подключения библиотек), и главное как?

danik.js 06.03.2013 18:21

Конечно можно. HTML-код со стилями в студию. И ваш js-код, который вы сумели написать. Кстати вопрос - чем не устраивает jquery или иные библиотеки для анимации?

Astrey 07.03.2013 09:56

Устаревает. Но я хотел бы узнать - способен ли это сделать сам JS без библиотек.
Мой код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
</head>
<body onload="style_function()">
<table id="table00" border="3">
<tr>
<td onclick="height_function()"></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>
<script type="text/javascript">

function style_function(){

sell = document.getElementById('table00').getElementsByTa gName("td");
for(i=0; i<sell.length; i++){

sell[i].style.width = '200px';
sell[i].style.height = '50px';

}

}

function height_function(){

sell = document.getElementById('table00').getElementsByTa gName("td");

var i = 0;
while(i<5){

var date00 = new Date();
var seconds = date00.getSeconds();

while(true){
var date01 = new Date();
if(seconds !== date01.getSeconds())break;
}

sell[i].style.display = "none";

i++;

}
}
</script>
</body>
</html>

danik.js 07.03.2013 10:56

Код отформатируйте.
Цитата:

Сообщение от Astrey
способен ли это сделать сам JS без библиотек

А библиотеки на чем пишут по вашему? На ассемблере чтоли? Просто зачем писать что-то, если это уже давно написано, оптимизировано и включено в готовую библиотеку? Если ради интереса - то помоему у вас слишком мало опыта с js чтобы таким заниматься.

Astrey 07.03.2013 23:28

Ну что же, должно быть вы праву. Не стоит выделываться :)

megaupload 07.03.2013 23:53

на, заебал http://habrahabr.ru/post/111658/

_SR_71_ 08.03.2013 14:35

Попытался решить вашу задачу
<style type="text/css">
    #table00 td {
      width: 200px;
      height: 50px;
    }
</style>
<script type="text/javascript">

  function height_function() {
    var sell = document.getElementById('table00').getElementsByTagName("td");
    var i = sell.length;
    
      setTimeout(function run() { sell[i].style.display = "none";
      var t = setTimeout(run, 1000);
      i--;
      if(i == 0)
        clearTimeout(t); }, 1000);
  }
  
</script>

</head>
<body>
<table id="table00" border="3">
<tr>
<td onclick="height_function()"></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>

</body>

Но возникает проблема, внутри setTimeout не видны элементы sell. Если кто знает в чем проблема, отпишитесь пожалуйста.

Deff 08.03.2013 15:07

Цитата:

Сообщение от _SR_71_
Но возникает проблема, внутри setTimeout не видны элементы sell.

setTimeout(function () {
   var run=function () { sell[i].style.display = "none";
      i--; if(i == 0) {clearTimeout(t); return;}
     var t = setTimeout(run, 1000);
  }
}, 1000);

Элемента с i=sell.length; - Нет

danik.js 08.03.2013 15:14

Цитата:

Сообщение от _SR_71_
Но возникает проблема, внутри setTimeout не видны элементы sell

Это не так. Просто должно быть:
var i = sell.length -1 ;


var t = setTimeout(run, 1000);
i--;
if(i == 0)
 clearTimeout(t);

Что? Сначала ставим таймер, потом начинаем думать, и если таймер не нужен - стираем? Может сразу начать думать (делать проверку) и не ставить таймер когда не надо?

И sell - тело продавать, а ячейки - это cells :)

Deff 08.03.2013 15:35

Ксать чот криво вообще построено, вроде так интересней:


<script type="text/javascript">

  function height_function() {
    var sell = document.getElementById('table00').getElementsByTagName("td");
    var i = sell.length;
    function run () {
        var tim0 = setTimeout(function () {
              i--; if(i == 0) {clearTimeout(tim0); return;}
             sell[i].style.display = "none";
         }, 1000);
         run ();
    }
}

</script>

danik.js 08.03.2013 18:07

Ну тогда так:
function myFunction() {
    var table = document.getElementById('table00');
    var cells = table.getElementsByTagName('td');
    var i = cells.length - 1;
    (function(){
        cells[i].style.display = 'none';
        if (--i) {
            setTimeout(artuments.callee, 1000);
        }
    })();
}

В javascript используется верблюжийСтильИменованияП еременных

Deff 08.03.2013 19:24

Цитата:

Сообщение от danik.js
В javascript используется верблюжийСтильИменованияП еременных

a Date;a URL, - так что не нун навязывать: http://www.wisdomweb.ru/JS/var.php
Цитата:

Идентификатор в JavaScript может начинаться с буквы, нижнего подчеркивания (_), или знака доллара ($); следующие за первым символы могут также быть и цифрами (0-9). Так так JavaScript чуствителен к регистру, то учтите что 'A' и 'a' это разные символы.

Начиная с JavaScript 1.5, вы можете пользоваться ISO 8859-1 или символами Unicode в идентификаторах, например такие как å или ü. Вы также можете записывать идентификаторы в формате Unicode последовательности \uXXXX Unicode escape sequences.

И, если на то пошло, в IF точно дурной стиль использовать --i или i++

_SR_71_ 08.03.2013 19:38

По поводу i = sell.length оказалось правильно, но я это всё понимал, когда писал код,было вместо 5 элементов 4. Видимо что-то другое путал.
Deff, не понял в чем кривость и чем ваш вариант лучше?

danik.js 08.03.2013 20:06

Цитата:

Сообщение от Deff
a Date;a URL

Ой блин. Но от тебя то я не ожидал такую лажу услышать )
Конструкторы - с большой буквы, переменные и свойства (в том числе и функции) - с маленькой. URL - это вообще отдельный случай, это же аббревиатура.
Цитата:

Сообщение от Deff
И, если на то пошло, в IF точно дурной стиль использовать --i или i++

Это почему? Это только твое мнение? Тогда плевал я.
Цитата:

Сообщение от Deff
так что не нун навязывать

Дружок. Я не навязываю. Это принятый стиль именования в javascript.. И если в php общепринятого нет, то в JS очень даже есть, спроси любого нормального кодера (Deff в их списки видимо пока не попадает)
Если кодишь чисто для себя, то можешь хоть на кириллице кодить или азбукой морзе кодировать - это абсолютно никого не волнует.

Deff 08.03.2013 20:28

Цитата:

Сообщение от danik.js
Это почему? Это только твое мнение? Тогда плевал я.

Цитата:

Сообщение от danik.js
Ой блин. Но от тебя то я не ожидал такую лажу услышать

Симметрично - С праздничком ксати... У Вас куча сомомнения, и стиль - , судя по форуму, - сначало засрать код, потом обдумать. По стилю - точно не профессионализм, берите пример с ответов на Stack Overflow, даже на самые дурацкие вопросы!


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