Страница 1 из 2
Выпадающее меню
Добавлено: 11 сен 2013, 15:47
SHAHIN
Здравствуйте, как задать скорость выпадающего меню и чтобы меню при наведении курсора не просто появлялясь, а с определенной скоростью выдвигалась в низ и задвигалась если курсор не наведен тоже с определенной скоростью
вот скрипт:
Код PHP:
t type="text/javascript">
<!--
var timeout = 500;
var closetimer = 0;
var ddmenuitem = 0;
// open hidden layer
function mopen(id)
{
// cancel close timer
mcancelclosetime();
// close old layer
if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
// get new layer and show it
ddmenuitem = document.getElementById(id);
ddmenuitem.style.visibility = 'visible';
}
// close showed layer
function mclose()
{
if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
}
// go close timer
function mclosetime()
{
closetimer = window.setTimeout(mclose, timeout);
}
// cancel close timer
function mcancelclosetime()
{
if(closetimer)
{
window.clearTimeout(closetimer);
closetimer = null;
}
}
// close layer when click-out
document.onclick = mclose;
// -->
</script>
вот код:
Код PHP:
<ul id="sddm">
<li><a href="/" onmouseover="mopen('m1')" onmouseout="mclosetime()">Меню</a>
<div id="m1" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
<a href="#">HTML DropDown</a>
<a href="#">DHTML DropDown menu</a>
<a href="#">JavaScript DropDown</a>
<a href="#">DropDown Menu</a>
<a href="#">CSS DropDown</a>
</div>
</li>
</ul>
Заранее огромное спасибо
Re: Выпадающее меню
Добавлено: 17 сен 2013, 12:59
Хыиуду
Проще всего для такой цели использовать фреймворки типа jQuery, где уже есть функции типа toggleSlide или slideToggle, не помню, там можно указать скорость (точно или примерно)
Re: Выпадающее меню
Добавлено: 17 сен 2013, 14:40
Duncon
jQuery для дебилов не знающих JavaScript. Задача подобная решается: меряем время начала анимации start=new Date затем задаём интервал срабатывания анимации скажем 10мс или меньше, но не меньше 4мс - браузеры не считают меньше, внутри интервала анимации считаем прогресс анимации (new Date - start) / время_на_анимацию;(например 1000мс) получим float значения от нуля к единице, это даст плавность срабатывания, потому что расчёты, как показывает практика, при setInterval будут "неровными" и как следствие будут рывки.. Всё что остаётся полученное значение умножить на нужную высоту элемента (offsetHeight) и в обратном порядке то же самое вычитаем значение из высоты (e.style.height=h-(progress * h) + 'px'

.. Естественно не забыть вычистить интервал если он выходит за единицу.. Ещё есть момент скрытые блоки не будут обсчитаны пока не будут показаны, я это обхожу так e.style.display = 'block';h = parseInt(e.offsetHeight); e.style.height = 0 + 'px';. Чтоб небыло полосы прокрутки overflow:hidden
В итоге имеем сколько-то байт кода и отлично работающую анимацию, вместо подключения библиотек для баранов и использования 0,1% функциональности от этой библиотеки для анимации участка и необходимости тягать за собой в лучшем случае десятки кб кода а то и сотни..
Re: Выпадающее меню
Добавлено: 19 сен 2013, 01:57
SHAHIN
большое спасибо за написания целой лекции! Видно что вы хороший знаток в этом деле, но я новечек.
Если есть возможность просто напишите что-куда вставить и все.
Заранее спасибо!
Re: Выпадающее меню
Добавлено: 19 сен 2013, 10:52
Хыиуду
Duncon писал(а):jQuery для дебилов не знающих JavaScript.
jQuery для тех, кому он нужен. Если необходим только и исключительно этот функционал, при этом критично быстродействие - можно и свою функцию написать, а если его функционал много где и много как используется - нет смысла изобретать велосипед
Re: Выпадающее меню
Добавлено: 19 сен 2013, 10:55
Duncon
Не, я написал все нужные кроссбраузерно работающие методы, не нужно искать и мучится, новичок не новичок а без самостоятельной практики программист никогда не получится, а обезьянок копипастеров тут никто не любит - для них jQuery мотолс и прочие библиотеки написаны..
Re: Выпадающее меню
Добавлено: 19 сен 2013, 12:55
SHAHIN
не ужели так сложно написать что куда и все?
Re: Выпадающее меню
Добавлено: 19 сен 2013, 13:55
Duncon
jQuery для тех, кому он нужен. Если необходим только и исключительно этот функционал, при этом критично быстродействие - можно и свою функцию написать, а если его функционал много где и много как используется - нет смысла изобретать велосипед
Нет таких задач где он везде используется(по крайней мере не для сайтов), тут речь скорее о другом что подавляющее большинство не сможет это велосипед написать, у меня с нуля уходит до часа времени на любой спецэффект типа слайдера и прочего, врать сильно не хочу но вот на днях нарезал(оформлял) слайдер около 2 часов анимаировал около часа. Естественно некоторые моменты сложней, к примеру галерею я написал(немного не так как можно было с точки зрения анимации, был уставшим и плохо соображал) с где-то с год назад за 3 дня параллельно с другими подгрузками по работе.. (не буду голословным landshaftica.ru/works 7,7кб кода вместо 150кб или сколько там на jQuery, бойан меню слева туда же 9,2кб кода(с остальным для сайта) вместо хз сколько приплюсовать к jQuery, причём я много сайтов видел с использованием этой либы, в среднем обычно +500кб к дизайну - это много, я понимаю что всё это кэшится, но перлы которые выдают дизайнеры сами по себе много весят приходится экономить на всём, про быстродействие уже молчу.)
не ужели так сложно написать что куда и все?
Вопрос не в трудно, вопрос в том чтоб из вас получился программист, а не копипастер или вы научились пользоваться поиском, нужно чтоб кто-то сделал за вас есть раздел заказы для программистов. К тому же реализация зависит от вашего кода..
Re: Выпадающее меню
Добавлено: 19 сен 2013, 23:11
SHAHIN
так я всеравно в этом деле не понимаю почти и не собираюсь стать праграммистом и сайт у меня на цмс. короче зря я написал на этот форум время только попусту трачу!!!!!!!!!!!!!!
Re: Выпадающее меню
Добавлено: 20 сен 2013, 11:18
Duncon
В раздел "Вакансии и заказы для программистов" пишите тогда, время мы на вас потратили а не вы на нас, в поиске халявы все..