Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Оформление меню


Автор: Pakshin A. S. 23.6.2005, 08:54
Есть меню, которое недавно тут обсуждалось... Мне бы хотелось сдлеать такое: при наведении мышкой на мой пункт (т. е. на ячейку тавблички) появлялась подсказка (всплавыющия около курсора и внизу окна, т. е. как при наведении на ссылку)...

Автор: Black 23.6.2005, 11:59
Pakshin A. S.
Sardar уже про это писал это:
http://forum.vingrad.ru/index.php?showtopic=53318


Автор: Black 23.6.2005, 12:13
Вот еще (взял с какого-то сайта, точно не помню):

Код


// makeNiceTitles


var XHTMLNS = "http://www.w3.org/1999/xhtml";
var CURRENT_NICE_TITLE;
addEvent(window, "load", makeNiceTitles);
function makeNiceTitles() {
        if (!document.createElement || !document.getElementsByTagName) return;
        // add namespace methods to HTML DOM; this makes the script work in both HTML and XML contexts.
        if(!document.createElementNS) {
                document.createElementNS = function(ns,elt) {
                        return document.createElement(elt);
                }
        }
        if(!document.links) {
                document.links = document.getElementsByTagName("a");
        }
        for (var ti=0;ti<document.links.length;ti++) {
                var lnk = document.links[ti];
                if (lnk.title) {
                        lnk.setAttribute("nicetitle",lnk.title);
                        lnk.removeAttribute("title");
                        addEvent(lnk,"mouseover",showNiceTitle);
                        addEvent(lnk,"mouseout",hideNiceTitle);
                        addEvent(lnk,"focus",showNiceTitle);
                        addEvent(lnk,"blur",hideNiceTitle);
                }
        }
        var instags = document.getElementsByTagName("ins");
        if (instags) {
                for (ti=0;ti<instags.length;ti++) {
                        var instag = instags[ti];
                        if (instag.dateTime) {
                                var strDate = instag.dateTime;
                                var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15));
                                instag.setAttribute("nicetitle","Added on "+dtIns.toString());
                                addEvent(instag,"mouseover",showNiceTitle);
                                addEvent(instag,"mouseout",hideNiceTitle);
                                addEvent(instag,"focus",showNiceTitle);
                                addEvent(instag,"blur",hideNiceTitle);
                        }
                }
        }
}

function findPosition( oLink ) {
        if( oLink.offsetParent ) {
                for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
                        posX += oLink.offsetLeft;
                        posY += oLink.offsetTop;
                }
                return [ posX, posY ];
        } else {
                return [ oLink.x, oLink.y ];
        }
}

function showNiceTitle(e) {
        try {
                if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
        } catch(err) {
                return;
        }
        if (!document.getElementsByTagName) return;
        if (window.event && window.event.srcElement) {
                lnk = window.event.srcElement
        } else if (e && e.target) {
                lnk = e.target
        }
        if (!lnk) return;
        if (lnk.nodeType == 1 || lnk.nodeType == 3) {
                // lnk is a textnode -- ascend parents until we hit a link
                lnk = getParent(lnk,"A");
        }
        if (!lnk) return;
        nicetitle = lnk.getAttribute("nicetitle");

        var d = document.createElementNS(XHTMLNS,"div");
        d.className = "nicetitle";
        tnt = document.createTextNode(nicetitle);
        pat = document.createElementNS(XHTMLNS,"p");
        pat.className = "titletext";
        pat.appendChild(tnt);
        d.appendChild(pat);
        if (lnk.href) {
                tnd = document.createTextNode(lnk.href);
                pad = document.createElementNS(XHTMLNS,"p");
                pad.className = "destination";
                pad.appendChild(tnd);
                d.appendChild(pad);
        }

        STD_WIDTH = 300;
        if (lnk.href) {
                h = lnk.href.length;
        } else { h = nicetitle.length; }
        if (nicetitle.length) {
                t = nicetitle.length;
        }
        h_pixels = h*6; t_pixels = t*10;

        if (h_pixels > STD_WIDTH) {
                w = h_pixels;
        } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
                w = t_pixels;
        } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
                w = h_pixels;
        } else {
                w = STD_WIDTH;
        }

        d.style.width = w + 'px';

        mpos = findPosition(lnk);
        mx = mpos[0];
        my = mpos[1];

        d.style.left = (mx+15) + 'px';
        d.style.top = (my+35) + 'px';
        if (window.innerWidth && ((mx+w) > window.innerWidth)) {
                d.style.left = (window.innerWidth - w - 25) + "px";
        }
        if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
                d.style.left = (document.body.scrollWidth - w - 25) + "px";
        }

        document.getElementsByTagName("body")[0].appendChild(d);

        CURRENT_NICE_TITLE = d;
}

function hideNiceTitle(e) {
        if (!document.getElementsByTagName) return;
        if (typeof(CURRENT_NICE_TITLE) != "undefined" && CURRENT_NICE_TITLE) {
                document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
                CURRENT_NICE_TITLE = null;
        }
}

// Add an eventListener to browsers that can do it somehow.
// Originally by the amazing Scott Andrew.
function addEvent(obj, evType, fn){
        if (obj.addEventListener){
                obj.addEventListener(evType, fn, true);
                return true;
        } else if (obj.attachEvent){
                var r = obj.attachEvent("on"+evType, fn);
                return r;
        } else {
                return false;
        }
}

function getParent(el, pTagName) {
        if (el == null) return null;
        else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
                return el;
        else
                return getParent(el.parentNode, pTagName);
}

function getMousePosition(event) {
        if (is.IE) {
                x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
                y = window.event.clientY + document.documentElement.scrollTop        + document.body.scrollTop;
        }
        if (is.NS) {
                x = event.clientX + window.scrollX;
                y = event.clientY + window.scrollY;
        }
        return [x,y];
}




Автор: Pakshin A. S. 23.6.2005, 12:29
Ууу... лучше откажусь... Ничерта не понимаю...

Это каким местом пристраивать к моей менюшке? http://pakshin.com.ru/ps

Автор: Black 23.6.2005, 12:42
Pakshin A. S.
меню это то что ниже слова Услуги?

Автор: Pakshin A. S. 23.6.2005, 12:46
Все оно... Все, что срамками красными...

Автор: Black 23.6.2005, 13:59
Вот, наверное самое подходящее:

http://www.rx-host.net/overlib.js

Запускать так:

Код

<a href="javascript:void(0);" onMouseOver="return overlib('Здесь описание.', CAPTION, '<center>заголовок</center>');" onMouseOut="return nd();">текст</a>


можно не только на сссылки вешать, но и на <td>, например:

Код

<td onMouseOver="return overlib('Здесь описание.', CAPTION, '<center>заголовок</center>');" onMouseOut="return nd();">текст</td>

Автор: Pakshin A. S. 23.6.2005, 15:50
А как файл подключать к страничке? или ничего не надо делать?
Добавлено @ 15:51
Код
<script language="javascript" src="./html/quote.js"></script>


Нашел... так подключать? верно?

Автор: Black 23.6.2005, 16:17
Pakshin A. S.
да так... только правильный путь к скрипту укажите в src='путь/name.js'... ну и скопируйте текст скрипта в файл name.js

Автор: Sardar 23.6.2005, 18:18
А чем аттрибут title не угодил? Подсказку(появляющиеся слои) на первых стадиях разрабатывали в http://forum.vingrad.ru/index.php?showtopic=54694 теме.

Автор: Pakshin A. S. 23.6.2005, 20:13
И то верно! Все... нуна хороший учебник найти... smile

Автор: Ciber SLasH 23.6.2005, 20:41
Цитата(Pakshin @ 23.6.2005, 21:13)
И то верно! Все... нуна хороший учебник найти

А ты зайди вот сюда: http://forum.vingrad.ru/index.php?showtopic=19939&st=15
там я как раз выкладывал ссылку на архивчик (справачник отличный).

Автор: Black 23.6.2005, 20:55
Pakshin A. S.
вот советую обо всем: http://wdh.suncloud.ru/contents.htm
Этот сайт многим даЁт понять, что ты в веб-разработке еще ничего не соображаешь smile

Автор: Pakshin A. S. 23.6.2005, 22:02
Биг сенкс!!! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)