Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кроссбраузерность для меню, помогите добиться кроссбраузерности 
:(
    Опции темы
Skifko
Дата 29.5.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Не знаю как перебить скрипт для кроссбраузерности. в ИЕ 7.0 работает спокойно, в опере и мозиле вообще никак. Подскажите что можно изменить в коде ?

Вот сайт http://ksvc.ru/

вот файл menu.js (ранее планировалось с субменю, но я убрал его в другом файле)

Код

if (document.all)    {n=0;ie=1;fShow="visible";fHide="hidden";}
if (document.layers) {n=1;ie=0;fShow="show";   fHide="hide";}

window.onerror=new Function("return true")
////////////////////////////////////////////////////////////////////////////
// Function Menu()                                                        //
////////////////////////////////////////////////////////////////////////////
rightX = 0;
function Menu()
{
    this.bgColor     = "#635f5f";
    if (ie) this.menuFont = "bold x-small Verdana";
    if (n)  this.menuFont = "bold x-small Verdana";
    this.fontColor   = "white";

    this.addItem    = addItem;
    this.addSubItem = addSubItem;
    this.showMenu   = showMenu;
    this.mainPaneBorder = 1;
    this.subMenuPaneBorder = 1;

    this.subMenuPaneWidth = 150;

    lastMenu = null;
    
    rightY = 0;
    leftY = 0;
    leftX = 0;

    HTMLstr = "";
    HTMLstr += "<!-- MENU PANE DECLARATION BEGINS -->\n";
    HTMLstr += "\n";
    if (ie) HTMLstr += "<div id='MainTable' style='position:relative'>\n";
//    if (n)  HTMLstr += "<layer name='MainTable'>\n";
    HTMLstr += "<table width='100%' bgcolor='"+this.bgColor+"' border='"+this.mainPaneBorder+"'>\n";
    HTMLstr += "<tr>";
    if (n) HTMLstr += "<td>&nbsp;";
    HTMLstr += "<!-- MAIN MENU STARTS -->\n";
    HTMLstr += "<!-- MAIN_MENU -->\n";
    HTMLstr += "<!-- MAIN MENU ENDS -->\n";
    if (n) HTMLstr += "</td>";
    HTMLstr += "</tr>\n";
    HTMLstr += "</table>\n";
    HTMLstr += "\n";
    HTMLstr += "<!-- SUB MENU STARTS -->\n";
    HTMLstr += "<!-- SUB_MENU -->\n";
    HTMLstr += "<!-- SUB MENU ENDS -->\n";
    HTMLstr += "\n";
    if (ie) HTMLstr+= "</div>\n";
//    if (n)  HTMLstr+= "</layer>\n";
    HTMLstr += "<!-- MENU PANE DECALARATION ENDS -->\n";
}

function addItem(idItem, text, hint, location, altLocation)
{
    var Lookup = "<!-- ITEM "+idItem+" -->";
    if (HTMLstr.indexOf(Lookup) != -1)
    {
        alert(idParent + " already exist");
        return;
    }
    var MENUitem = "";
    MENUitem += "\n<!-- ITEM "+idItem+" -->\n";
    if (n)
    {
        MENUitem += "<ilayer name="+idItem+">";
        MENUitem += "<a href='"+location+"' class=clsMenuItemIE>";
        MENUitem += "|&nbsp;";
        MENUitem += text;
        MENUitem += "</a>";
        MENUitem += "</ilayer>";
    }
    if (ie)
    {
        MENUitem += "<td>\n";
        MENUitem += "<div id='"+idItem+"' style='position:relative; font: "+this.menuFont+";'>\n";
        MENUitem += "<a ";
        MENUitem += "class=clsMenuItemIE ";
        MENUitem += "style='text-decoration: none; font: "+this.menuFont+"; color: "+this.fontColor+"; cursor: hand;' ";
        if (hint != null)
            MENUitem += "title='"+hint+"' ";
        if (location != null)
        {
            MENUitem += "href='"+location+"' ";
            MENUitem += "onmouseover=\"hideAll()\" ";
        }
        else
        {
            if (altLocation != null)
                MENUitem += "href='"+altLocation+"' ";
            else
                MENUitem += "href='.' ";
            MENUitem += "onmouseover=\"displaySubMenu('"+idItem+"')\" ";
            MENUitem += "onclick=\"return false;\" "
        }
        MENUitem += ">";
        MENUitem += "|&nbsp;\n";
        MENUitem += text;
        MENUitem += "</a>\n";
        MENUitem += "</div>\n";
        MENUitem += "</td>\n";
    }
    MENUitem += "<!-- END OF ITEM "+idItem+" -->\n\n";
    MENUitem += "<!-- MAIN_MENU -->\n";

    HTMLstr = HTMLstr.replace("<!-- MAIN_MENU -->\n", MENUitem);
}

function addSubItem(idParent, text, hint, location)
{
    var MENUitem = "";
    Lookup = "<!-- ITEM "+idParent+" -->";
    if (HTMLstr.indexOf(Lookup) == -1)
    {
        alert(idParent + " not found");
        return;
    }
    Lookup = "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->";
    if (HTMLstr.indexOf(Lookup) == -1)
    {
        if (n)
        {
            MENUitem += "\n";
            MENUitem += "<layer id='"+idParent+"submenu' visibility=hide bgcolor='"+this.bgColor+"'>\n";
            MENUitem += "<table border='"+this.subMenuPaneBorder+"' bgcolor='"+this.bgColor+"' width="+this.subMenuPaneWidth+">\n";
            MENUitem += "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n";
            MENUitem += "</table>\n";
            MENUitem += "</layer>\n";
            MENUitem += "\n";
        }
        if (ie)
        {
            MENUitem += "\n";
            MENUitem += "<div id='"+idParent+"submenu' style='position:absolute; visibility: hidden; width: "+this.subMenuPaneWidth+"; font: "+this.menuFont+"; top: -300;'>\n";
            MENUitem += "<table border='"+this.subMenuPaneBorder+"' bgcolor='"+this.bgColor+"' width="+this.subMenuPaneWidth+">\n";
            MENUitem += "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n";
            MENUitem += "</table>\n";
            MENUitem += "</div>\n";
            MENUitem += "\n";
        }
        MENUitem += "<!-- SUB_MENU -->\n";
        HTMLstr = HTMLstr.replace("<!-- SUB_MENU -->\n", MENUitem);
    }

    Lookup = "<!-- NEXT ITEM OF SUB MENU "+ idParent +" -->\n";
    if (n)  MENUitem = "<tr><td><a class=clsMenuItemNS title='"+hint+"' href='"+location+"'>"+text+"</a><br></td></tr>\n";
    if (ie) MENUitem = "<tr><td><a class=clsMenuItemIE title='"+hint+"' href='"+location+"'>"+text+"</a><br></td></tr>\n";
    MENUitem += Lookup;
    HTMLstr = HTMLstr.replace(Lookup, MENUitem);

}

function showMenu()
{
    document.writeln(HTMLstr);
}

////////////////////////////////////////////////////////////////////////////
// Private declaration
function displaySubMenu(idMainMenu)
{
    var menu;
    var submenu;
    if (n)
    {
        submenu = document.layers[idMainMenu+"submenu"];
        if (lastMenu != null && lastMenu != submenu) hideAll();
        submenu.left = document.layers[idMainMenu].pageX;
        submenu.top  = document.layers[idMainMenu].pageY + 25;
        submenu.visibility = fShow;

        leftX  = document.layers[idMainMenu+"submenu"].left;
        rightX = leftX + document.layers[idMainMenu+"submenu"].clip.width;
        leftY  = document.layers[idMainMenu+"submenu"].top+
            document.layers[idMainMenu+"submenu"].clip.height;
        rightY = leftY;
    } else if (ie) {
        menu = eval(idMainMenu);
        submenu = eval(idMainMenu+"submenu.style");
        submenu.left = calculateSumOffset(menu, 'offsetLeft');
//        submenu.top  = calculateSumOffset(menu, 'offsetTop') + 30;
        submenu.top  = menu.style.top+23;
        submenu.visibility = fShow;
        if (lastMenu != null && lastMenu != submenu) hideAll();

        leftX  = document.all[idMainMenu+"submenu"].style.posLeft;
        rightX = leftX + document.all[idMainMenu+"submenu"].offsetWidth;

        leftY  = document.all[idMainMenu+"submenu"].style.posTop+
            document.all[idMainMenu+"submenu"].offsetHeight;
        rightY = leftY;
    }
    lastMenu = submenu;
}

function hideAll()
{
    if (lastMenu != null) {lastMenu.visibility = fHide;lastMenu.left = 0;}
}

function calculateSumOffset(idItem, offsetName)
{
    var totalOffset = 0;
    var item = eval('idItem');
    do
    {
        totalOffset += eval('item.'+offsetName);
        item = eval('item.offsetParent');
    } while (item != null);
    return totalOffset;
}

function updateIt(e)
{
    if (ie)
    {
        var x = window.event.clientX;
        var y = window.event.clientY;

        if (x > rightX || x < leftX) hideAll();
        else if (y > rightY) hideAll();
    }
    if (n)
    {
        var x = e.pageX;
        var y = e.pageY;

        if (x > rightX || x < leftX) hideAll();
        else if (y > rightY) hideAll();
    }
}

if (document.all)
{
    document.body.onclick=hideAll;
    document.body.onscroll=hideAll;
    document.body.onmousemove=updateIt;
}
if (document.layers)
{
    document.onmousedown=hideAll;
    window.captureEvents(Event.MOUSEMOVE);
    window.onmousemove=updateIt;
}


файл самого меню contextmenu.js

Код

function showToolbar()
{
// AddItem(id, text, hint, location, alternativeLocation);
// AddSubItem(idParent, text, hint, location);

    menu = new Menu();
    menu.addItem("webmasterid", "Главная", "Главная",  '/', null);
    menu.addItem("newsid", "Прайсы", "Прайсы",  '/price', null);
    menu.addItem("freedownloadid", "Карты", "Карты",  '/maps', null);
    menu.addItem("searchengineid", "Контакты", "Контакты",  '/adress', null);
    menu.addItem("miscid", "Заказать", "Заказать",  '/order', null);

    menu.showMenu();
}

PM MAIL   Вверх
Skifko
Дата 30.5.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



... помогите ктонибудь решить эту проблему  smile 
PM MAIL   Вверх
Samotnik
Дата 30.5.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



Цитата(Skifko @  30.5.2009,  12:52 Найти цитируемый пост)
помогите ктонибудь решить эту проблему


Цитата(Skifko @  29.5.2009,  14:39 Найти цитируемый пост)
в ИЕ 7.0 работает спокойно, в опере и мозиле вообще никак

для начала хоть скажи, какие ошибки фаербаг вываливает,  и вообще, что значит  "не работает" ?


PM MAIL   Вверх
Aliance
Дата 30.5.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Дело в том, что данное меню видимо писалось лет 7 назад. И понятное дело, таких древних коллекций (document.layers) уже нет. Сейчас эпоха W3C. Переписывать такой скрипт никто не будет, тут на форуме помогают самому решить проблему. А скрипт заного могут написать в разделе работа, за деньги.
PM MAIL WWW ICQ Skype   Вверх
Skifko
Дата 4.6.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



хмм... тогда расскажи как добиться плавающего по сайту слоя или фрейма, я то уже дальше допишу
PM MAIL   Вверх
bazzjr
Дата 5.6.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Skifko ты формулируешь свои вопросы крайне неполно и расплывчато.

Твой код javascript огромен, зачем столько тустых строк, столько не нужной информации?

Я так и не понял, что где у тебя не работает, а что работает? У меня например  во всех браузерах так и не отобразилось какого нибудь меню... 

Что значит "плавающего"? Сформулируй вопрос четко.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.