Проблемы с готовыми функциями JQuery
Я использую плагин dropShadow, и у меня проблема с JQuery ready
функция.
Когда у меня есть такой код:
$(document).ready(function() {
$('div#shadow').dropShadow();
$('#navigation li.mainmenu').bind('mouseover', navigation_open);
$('#navigation li').bind('mouseout', navigation_timer);
});
Он создаст тень только после того, как появится выпадающее меню, что является второй функцией. Есть идеи почему?
Полный код JS:
$(document).ready(
function()
{
$('#navigation li.mainmenu').bind('mouseover', navigation_open);
$('#navigation li').bind('mouseout', navigation_timer);
});
var timeout = 500;
var closetimer = 0;
var ddmenuitem = 0;
var highlightmenu = 0;
var returncolor = 0;
var textreturncolor = 0;
var height = 0;
var originaltop = 0;
var resettop = 0;
var top = 0;
var shadowExists = 0;
var dropshadow = 0;
function drawShadow(){
//draw the shadow only on mouse enter
dropshadow = $(this).find('ul').dropShadow({top: 4, opacity: 1});
$('.dropShadow').css('visibility','visible');
}
function navigation_open()
{ navigation_canceltimer();
navigation_close();
height = $(this).height();
ddmenuitem = $(this).find('ul');
//Double Liners are above 40 pixels
menu = ddmenuitem.find('li');
/*===Need to get the top pos. of the item and adjust it since it is absolute; relative does not work*/
top = ddmenuitem.position().top;
resettop = top;
if (height > 40){
top = top - 53;
}
else{
top = top - 35;
}
ddmenuitem.css('top', top.toString() + "px");
//---ADD A DROP SHADOW...USING JQUERY PLUGIN
ddmenuitem.dropShadow({top: 4, opacity: 1});
$('.dropShadow').css('visibility','visible');
ddmenuitem.css('visibility', 'visible');
returncolor = $(this).find('a#highlight').css('background-color');
textreturncolor = $(this).find('a#highlight').css('color');
highlightmenu = $(this).find('a#highlight').css('background-color','#6487ad');
highlightmenu.css('color','#ffffff');
highlightmenu.css('font-weight','bold');}
function navigation_close()
{ if(ddmenuitem){
ddmenuitem.css('visibility', 'hidden');
ddmenuitem.css('top',resettop);
ddmenuitem.removeShadow();
}
if(highlightmenu){ highlightmenu.css('background-color',returncolor);
highlightmenu.css('color',textreturncolor);
}
}
function navigation_timer()
{
closetimer = window.setTimeout(navigation_close, timeout);}
function navigation_canceltimer()
{ if(closetimer)
{
window.clearTimeout(closetimer);
closetimer = null;}}
document.onclick = navigation_close;
HTML-код будет выглядеть следующим образом:
<div id="shadow">
//images here
</div>
Я не знаю, нужно ли вам больше видеть, однако выпадающее меню - это просто список, но я хочу иметь возможность применить это к статическим изображениям, и не будет, пока не появятся выпадающие меню.
2 ответа
Проблема заключается в CSS, когда при вызове dropShadow () впервые css для класса dropShadow устанавливается в hiddent (он был помещен туда, чтобы динамические части работали в IE (все остальные браузеры без него работают). Вы можете увидеть это по вызову $('.dropShadow').css('видимость','видимый');
Плагин drophadow, похоже, предназначен для стационарных элементов страницы. Из JS-файла дропшоу:
"Этот плагин jQuery добавляет мягкие тени за элементы страницы. Он предназначен только для добавления нескольких теней в основном к стационарным объектам, таким как заголовок страницы, фотография или контейнеры содержимого"
РЕДАКТИРОВАТЬ: Возможно, вы могли бы достичь эффекта, который вы ищете с CSS? http://robertnyman.com/2010/03/16/drop-shadow-with-css-for-all-web-browsers/