Форум на Kuban.ru (http://forums.kuban.ru/)
-   Веб-дизайн и программирование (http://forums.kuban.ru/f1030/)
-   -   недейкая задачка по js onmouseover с setTimeout-ом (http://forums.kuban.ru/f1030/nedejkaya_zadachka_po_javascript_onmouseover_s_settimeout-om-3399684.html)

ars_2007 06.12.2012 20:06

недейкая задачка по js onmouseover с setTimeout-ом
 
Надо:
если над элементом (без id) нависнет мыша, то нужно покрасить элемент в другой цвет (onmouseover="this.style.color='red'; setTimeout('........', 1000);") и сделать так, что если через секунду указатель мышы будет все еще над ним (onmouseout="this.style.color='';"), то сделать this.onclick().

Вопрос, что надо написать вместо '........' в событии onmouseover()?

ars_2007 06.12.2012 20:07

недейкая = недецкая
сорри, репентинг.

toly84 07.12.2012 16:25

по событию mouseout нужно этому элементу ставить атрибут
а вместо троеточия делать клик, если атрибут установлен

toly84 07.12.2012 16:27

я не много напутал, но думаю идея понятна

ars_2007 07.12.2012 16:41

все, вопрос снимается.
[url]http://go2dad.com/c3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzNzQ4OTQxL29ubW91c2VvdmVyLXRvLWludm9rZS1vbmNsaWNrLWFmdGVyLTEtc2Vjb25k[/url]

ars_2007 07.12.2012 16:43

2-toly84 >
да, примерно так.
Но там вышел небольшой прикол: при setTimeout объект this превращался в объект window со всеми вытекающими (например нельзя было уже обратиться к this.parentNode, this.свойства и т.д. в онклике).

toly84 07.12.2012 16:51

5-Гавайские субтитры > с jQuery было бы без приколов, хотя на вкус и цвет...

ars_2007 07.12.2012 17:12

6-toly84 >
да там наверное то же самое.
Что там за функция это делает, не подскажете? Чисто посмотреть, как там реализовано.
(если там вообще такое есть)

fanatnascar 07.12.2012 17:21

7-Гавайские субтитры >[url]http://api.jquery.com/click/[/url]

toly84 07.12.2012 17:22

var element = $('#id');
element.mouseover(function()**
// меняем цвет
// ставим атрибут
setTimeout(function()**
// если есть атрибут - делаем клик
**)
**);
element.mouseout(function()**
// снимаем атрибут
**)

просто если таких элементов будет много - то нужно будет хранить для каждого из них объект таймера, а здесь - никаких заморочек

ars_2007 07.12.2012 17:40

9-toly84 >
у элемента нету айди, в том-то и прикол.

toly84 07.12.2012 17:43

10-Гавайские субтитры > что мешает поставить его? + можно выбрать по тегу.

ars_2007 07.12.2012 18:17

[quote=toly84;28056359]что мешает поставить его?[/quote]
ставить загодя - проблематично. Т.к. их миллион таких.
Это что-то типа дерева файлов и надо раскрывать ветки при перетаскивании элемента. Ставить айдишнеки не очень.
Но как видишь в примере по ссылке, я там создаю динамичский айди и не надо никакой жыквиэри.

[quote=toly84;28056359]+ можно выбрать по тегу.[/quote]
перебрать, может, а не выбрать?

toly84 07.12.2012 18:46

12-Гавайские субтитры > именно выбрать.

не надо, так не надо. я уже говорил про вкусы.

ars_2007 07.12.2012 18:53

[quote=toly84;28057080]именно выбрать.[/quote]
byTagName? Там ведь массив возвращается.
Или я чего-то не догоняю.
В общем, если можно сделать сабж без id и без задавания имени и т.п., работая чисто с объектом this, то рассказывайте.

toly84 07.12.2012 19:58

14-Гавайские субтитры > все что нужно в документации jQuery

ars_2007 07.12.2012 20:09

15-toly84 >
это мне известно, но я [b]у Вас[/b] спрашиваю.

toly84 07.12.2012 20:50

16-Гавайские субтитры > я разве нанялся к кому-то?

Искусственный Интеллект1 07.12.2012 21:19

не хотел ничего писать, учитывая автора :) но когда прочитал, что предлагают подключать jquery из-за такой ерунды, не выдержал.
Код

<script type="text/javascript">

var ident_timer = false;

function fstart( obj )
**
var obj_link = obj;
obj.style.color='red';
ident_timer = setTimeout( function()** if ( ident_timer )** obj_link.click(); ** **, 1000);
**

function fend( obj )
**
obj.style.color='';
if ( ident_timer )
**
clearTimeout( ident_timer );
**
ident_timer = false;
**

</script>

<div>
<a href="http://yandex.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко</a>
<br>
<a href="http://google.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко 2</a>
</div>

ars_2007 07.12.2012 21:43

18-Искусственный Интеллект1 >
да, лучше бы молчал и дальше. =)
Элементы лежат близко друг к другу, и ident_timer может перекрываться.
Не все так просто как кажется.

ЗЫ
и вообще, выше была дана ссылка на решение, и там есть и этот вариант.

Искусственный Интеллект1 07.12.2012 21:55

19-Гавайские субтитры > вот поэтому и не хотел помогать :)
Напиши html код, при котором не будет работать мой код.
Если не напишешь, то ты - трепло! :)

ars_2007 07.12.2012 22:15

20-Искусственный Интеллект1 >
пожалуйста:
<a href="http://yandex.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко
<br>
<a href="http://google.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко 2</a>
</a>

надеюсь, осилишь =)

Искусственный Интеллект1 07.12.2012 22:30

21-Гавайские субтитры > даже с твоим г*вно-кодом работает (хотя чего от тебя еще ожидать :) ты только такое и может делать:) ) без всяких изменений :), просто изменил html-код, javascript оставил как есть.

<script type="text/javascript">

var ident_timer = false;

function fstart( obj )
**
var obj_link = obj;
obj.style.color='red';
ident_timer = setTimeout( function()** if ( ident_timer )** obj_link.click(); ** **, 1000);
**

function fend( obj )
**
obj.style.color='';
if ( ident_timer )
**
clearTimeout( ident_timer );
**
ident_timer = false;
**

</script>

<div>
<a href="http://yandex.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко
<br>
<a href="http://google.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко 2</a>
</a>
</div>

и нормально все работает :)

Искусственный Интеллект1 07.12.2012 22:35

Но чтобы вооще все точняк было, и ты не усык*лся тут, приговаривая, что у тебя все не так просто :), немного подкорректировал код:

<script type="text/javascript">

var ident_timer = false;

function fstart( obj )
**
var obj_link = obj;
obj.style.color='red';
if ( ident_timer )
**
clearTimeout( ident_timer );
**
ident_timer = setTimeout( function()** if ( ident_timer )** obj_link.click(); ** **, 1000);
**

function fend( obj )
**
obj.style.color='';
if ( ident_timer )
**
clearTimeout( ident_timer );
**
ident_timer = false;
**

</script>

<div>
<a href="http://yandex.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко
<br>
<a href="http://google.ru/" onmouseover = "fstart( this );" onmouseout="fend( this );">ссылко 2</a>
</a>
</div>

ars_2007 07.12.2012 23:30

Походу, ИИ дурачок. Причом нервный. =)

ars_2007 07.12.2012 23:33

23-Искусственный Интеллект1 >
главное, клаву не сломай =))
И прочти №5

Искусственный Интеллект1 07.12.2012 23:57

25-Гавайские субтитры > я понимаю, что мозг твой слабенький, ты стараешься понять, но ничего у тебя не получается! :) Ты не в силах даже признать что мой код нормально работает :) Но попробуй хоть раз в жизни напрячь свой неразвитый мозг, и скопировать мой код и вставить его в свою страничку, а потом проверить его в браузере! Наверное на это у тебя мозга хватит? :) Или ты настолько туп, что не можешь даже выполнить копирование текста, а потом его вставить в другой текст?! :)

ars_2007 08.12.2012 00:12

[quote=Искусственный Интеллект1;28060902] 25-Гавайские субтитры &gt; я понимаю, что мозг твой слабенький, ты стараешься понять[/quote]
слабость могза можно определить хотя бы по тому, как ты читаешь сабж.
По сабжу твой метод не прокатит. Хоть убейся.
Тем более уже было сказано про это еще в №4.
Если бы кое-то еще умел читать.... =))

Искусственный Интеллект1 08.12.2012 13:01

27-Гавайские субтитры > конкретно код покажи, в котором мой метод не работает. То есть давай доказательства, а так это всё пустые слова :)

ars_2007 08.12.2012 18:17

28-Искусственный Интеллект1 >
уважаемый, я уже не знаю как вам разжевывать, где и что не работает. Гиблое дело. =)

ЗЫ
кстати, вы кудкудахнули "[em]Напиши html код, при котором не будет работать мой код. Если не напишешь, то ты - трепло! :)[/em]"
я вам написал код, при котором ваш код не работает, а вы даже не извинились за "трепло". =)

Искусственный Интеллект1 08.12.2012 21:28

29-Гавайские субтитры > хочешь извинений? Пожалуйста :)
Гавайские субтитры, извини, но ты - трепло! :)

ars_2007 08.12.2012 21:39

30-Искусственный Интеллект1 >
ты неправ. Твой код веть не работает в приведенном там примере.
Хотя ты неадекват, это уже заметно, все равно не согласишся, что ты неправ.

Ты же, кстати, даже на условия в сабже внимания не обратил. И к тому же в №4 есть такой же самый пример какой дал ты. Наверное ты оттудова его и слямзил =)))
В общем, ты неадекватный немного.


Текущее время: 19:34. Часовой пояс GMT +3.