Jump to content


Photo

Ajuda Com Title


  • Faça o login para participar
2 replies to this topic

#1 lprtrindade

lprtrindade

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 07/05/2010, 03:37

Ae pessoal blz !?
Seguinte... Eu tenho um código em javascript e CSS (ambos funcionam juntos) aqui que quando eu passo o mouse em cima de um link, ele me mostra um balão com a descrição que eu coloque em TITLE, dentro da TAG do A HREF.

Para terem idéia do que eu estou falando, aqui tem um demo, dele funcionando. Basta passarem o mouse em cima dos links: http://demo.1976design.com/nicetitles/

O código completo para o efeito segue abaixo:

<script type="text/javascript"> 
<!-- 
// set the namespace
var XHTMLNS = 'http://www.w3.org/1999/xhtml';
var CURRENT_NICE_TITLE;
 
// browser sniff
var browser = new Browser();
 
 
 
// determine browser and version.
function Browser()
	{
	var ua, s, i;
 
	this.isIE = false;
	this.isNS = false;
	this.version = null;
 
	ua = navigator.userAgent;
 
	s = 'MSIE';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isIE = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
		}
 
	s = 'Netscape6/';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isNS = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
		}
 
	// treat any other 'Gecko' browser as NS 6.1.
	s = 'Gecko';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isNS = true;
		this.version = 6.1;
		return;
		}
	}
 
 
 
// set delay vars to emulate normal hover delay
var delay;
var interval = 0.60;
 
 
 
// this function runs on window load
// it runs through all the links on the page as starts listening for actions
function makeNiceTitles()
	{
	if (!document.createElement || !document.getElementsByTagName) return;
	if (!document.createElementNS)
		{
		document.createElementNS = function(ns, elt)
			{
			return document.createElement(elt);
			}
		}
 
	// do regular links
	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', showDelay);
			addEvent(lnk, 'mouseout', hideNiceTitle);
			addEvent(lnk, 'focus', showDelay);
			addEvent(lnk, 'blur', hideNiceTitle);
			}
		}
 
	// do ins and del tags
	var tags = new Array(2);
	tags[0] = document.getElementsByTagName('ins');
	tags[1] = document.getElementsByTagName('del');
	for (var tt=0; tt<tags.length; tt++)
		{
		if (tags[tt])
			{
			for (var ti=0; ti<tags[tt].length; ti++)
				{
				var tag = tags[tt][ti];
				if (tag.dateTime)
					{
					var strDate = tag.dateTime;
					// HTML/ISO8601 date: yyyy-mm-ddThh:mm:ssTZD (Z, -hh:mm, +hh:mm)
					var month = strDate.substring(5,7);
					var day = strDate.substring(8,10);
					if (month[0] == '0')
						{
						month = month[1];
						}
					if (day[0] == '0')
						{
						day = day[1];
						}
					var dtIns = new Date(strDate.substring(0,4), month-1, day, strDate.substring(11,13), strDate.substring(14,16), strDate.substring(17,19));
					tag.setAttribute('nicetitle', (tt == 0 ? 'Added' : 'Deleted') + ' on ' + dtIns.toString());
					addEvent(tag, 'mouseover', showDelay);
					addEvent(tag, 'mouseout', hideNiceTitle);
					addEvent(tag, 'focus', showDelay);
					addEvent(tag, 'blur', hideNiceTitle);
					}
				}
			}
		}
	}
 
 
 
// add an eventlistener to browsers that can do it somehow.
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 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 getParent(el, pTagName)
	{
	if (el == null)
		{
		return null;
		}
	// gecko bug, supposed to be uppercase
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
		{
		return el;
		}
	else
		{
		return getParent(el.parentNode, pTagName);
		}
	}
 
 
 
// trailerpark wrapper function
function showDelay(e)
	{
    if (window.event && window.event.srcElement)
		{
        lnk = window.event.srcElement
		}
	else if (e && e.target)
		{
        lnk = e.target
		}
    if (!lnk) return;
 
	// lnk is a textnode or an elementnode that's not ins/del
    if (lnk.nodeType == 3 || (lnk.nodeType == 1 && lnk.tagName.toLowerCase() != 'ins' && lnk.tagName.toLowerCase() != 'del'))
		{
		// ascend parents until we hit a link
		lnk = getParent(lnk, 'a');
		}
	
	delay = setTimeout("showNiceTitle(lnk)", interval * 1000);
	}
 
 
 
// build and show the nice titles
function showNiceTitle(link)
	{
    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
    if (!document.getElementsByTagName) 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);
 
	// added in accesskey info
	if (lnk.accessKey)
		{
        axs = document.createTextNode(' [' + lnk.accessKey + ']');
		axsk = document.createElementNS(XHTMLNS, 'span');
        axsk.className = 'accesskey';
        axsk.appendChild(axs);
		pat.appendChild(axsk);
		}
    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)
	{
	// clearTimeout 
	if (delay) clearTimeout(delay);
	if (!document.getElementsByTagName) return;
	if (CURRENT_NICE_TITLE)
		{
		document.getElementsByTagName('body')[0].removeChild(CURRENT_NICE_TITLE);
		CURRENT_NICE_TITLE = null;
		}
	}
 
window.onload = function(e) {
makeNiceTitles();
}
-->
</script>
 
<style type="text/css"> 
<!--
div.nicetitle {
	background-color: #333;
	color: #fff;
	font: bold 13px "Trebuchet MS", Verdana, Arial, sans-serif;
	left: 0;
	padding: 4px;
	position: absolute;
	top: 0;
	width: 25em;
	z-index: 20;
	-moz-border-radius-bottomleft: 10px;
	-moz-border-radius-bottomright: 10px;
	-moz-border-radius-topleft: 0;
	-moz-border-radius-topright: 10px;
	-moz-opacity: .87;
	}
 
div.nicetitle p {
    margin: 0;
	padding: 0 3px;
	-moz-opacity: 1;
}
 
div.nicetitle p.destination {
    font-size: 9px;
    padding-top: 3px;
	text-align: left;
	-moz-opacity: 1;
}
 
div.nicetitle p span.accesskey {
	color: #d17e62;
}
-->
</style>

Bem o que acontece na verdade é o seguinte... Se vocês repararem, ao passar o mouse e aparecer o balão, ele aparece o texto que eu utilizei em TITLE porém, aparece em baixo o "Link" que será remetido ao clicar.

As duas coisas que eu gostaria de saber (se alguém puder me ajudar) são:

1 - Como REMOVER o link do balão. Deixando tão somente o Texto inserido em TITLE, mais nada.

2 - Ao invés de remover, como trocar aquele espaço para usar um texto por exemplo. Tipo, aparece em cima a descrição inserida em TITLE normalmente, e em baixo ao invés de aparecer o link, apareça um outro texto qualquer que eu coloque. Tem como fazer isto !?

Gostaria que as duas perguntas fossem respondidas separadamente. Pois a primeira, só precisa remover uma linha do JavaScript, que infelizmente, como não entendo muito, não sei qual linha remover exatamente, sem estragar o código. Já na segunda pergunta, acredito que tenha que modificar e/ou inserir código no meio.

Peço desculpas pelo tamanho do post, mais agradeceria muito se alguém pudesse me ajudar; afinal, sei que isto, para quem tem um pouco mais de conhecimento em JavaScript, é mamão. ;)

Obrigado.

#2 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 07/05/2010, 09:15

Bom dia lprtrindade,

1 - Como REMOVER o link do balão. Deixando tão somente o Texto inserido em TITLE, mais nada.
aonde tem esta linha



if (lnk.href){
        tnd = document.createTextNode(lnk.href);
        pad = document.createElementNS(XHTMLNS, 'p');
        pad.className = 'destination';
        pad.appendChild(tnd);
        //d.appendChild(pad);    <- Comenta isso aqui... que ele não vai exibir o link no 'balão'...
}


2 - Ao invés de remover, como trocar aquele espaço para usar um texto por exemplo. Tipo, aparece em cima a descrição inserida em TITLE normalmente, e em baixo ao invés de aparecer o link, apareça um outro texto qualquer que eu coloque. Tem como fazer isto !?



Bem... para você conseguir identificar as coisas pelo javascript, você precisa entender do DOM.
Fica aí os links para você estudar e aprender:

http://www.w3schools...ref/default.asp
http://pt.wikibooks....Javascript:_DOM
E principalmente esse aqui: http://www.w3.org/DOM/
Este último define muito bem o DOM... na verdade é a base para o entendimento do DOM...

Os links que estão sendo usados para gerar esses 'balões', possuem alguns atributos específicos.
Como o HREF, o TITLE... e etc...!

Se você pegar aquele código HTML que tem os links:

<ul>
        <li>The latest version of this demo can be found at: <a href="http://demo.1976design.com/nicetitles/" title="View the latest version of this demo">http://demo.1976design.com/nicetitles/</a></li>

        <li>The files for this demo can be found at: <a href="http://download.1976design.com/nicetitles/" title="Download the files for this demo">http://download.1976design.com/nicetitles/</a></li>
        <li>The related blog post can be found at: <a href="http://1976design.com/blog/archive/2003/11/21/nice-titles/" title="Read the related blog post">http://1976design.com/blog/archive/2003/11/21/nice-titles/</a></li>
        <li>The demos home page can be found at: <a href="http://demo.1976design.com/" title="Home">http://demo.1976design.com/</a></li>
        <li>Dunstan's blog can be found at: <a href="http://1976design.com/blog/" title="To the blog">http://1976design.com/blog/</a></li>
</ul>


Eles estão atualmente com estes atributos:
TITLE e HREF

Para adicionar mais alguma coisa nos balões você deve adicionar primeiramente nos links um novo atributo...
Os links possuem diversos atributos que podem ser usados...
Como exemplo vamos usar o atributo NAME

Coloque um atributo name em cada link como no exemplo:

<a href="http://demo.1976design.com/nicetitles/" name = "Teste de conteudo 01" title="View the latest version of this demo">http://demo.1976design.com/nicetitles/</a>

<a href="http://download.1976design.com/nicetitles/" name = "Teste de conteudo 02" title="Download the files for this demo">http://download.1976design.com/nicetitles/</a>

<a href="http://1976design.com/blog/archive/2003/11/21/nice-titles/" name = "Teste de conteudo 03" title="Read the related blog post">http://1976design.com/blog/archive/2003/11/21/nice-titles/</a>

<a href="http://demo.1976design.com/" name = "Teste de conteudo 04" title="Home">http://demo.1976design.com/</a>

<a href="http://1976design.com/blog/" name = "Teste de conteudo 05" title="To the blog">http://1976design.com/blog/</a>


Então você pega o mesmo código que estava comentado antes no javascript e realiza algumas modificações :

Antes ele estava assim:

if (lnk.href){			
       tnd = document.createTextNode(lnk.href);
       pad = document.createElementNS(XHTMLNS, 'p');
       pad.className = 'destination';
       pad.appendChild(tnd);
       d.appendChild(pad);
}

Antes ele pegava o atributo HREF, como adicionamos esse novo atributo NAME... vamos trocar para ele recuperar o valor do atributo NAME assim:


if (lnk.name){			
     tnd = document.createTextNode(lnk.name);
     pad = document.createElementNS(XHTMLNS, 'p');
     pad.className = 'destination';
     pad.appendChild(tnd);
     d.appendChild(pad);
}


Então o código ficaria assim... os links:

<ul>
<li>The latest version of this demo can be found at: <a href="http://demo.1976design.com/nicetitles/" name = "Teste de conteudo 01" title="View the latest version of this demo">http://demo.1976design.com/nicetitles/</a></li>

<li>The files for this demo can be found at: <a href="http://download.1976design.com/nicetitles/" name = "Teste de conteudo 02" title="Download the files for this demo">http://download.1976design.com/nicetitles/</a></li>
<li>The related blog post can be found at: <a href="http://1976design.com/blog/archive/2003/11/21/nice-titles/" name = "Teste de conteudo 03" title="Read the related blog post">http://1976design.com/blog/archive/2003/11/21/nice-titles/</a></li>
<li>The demos home page can be found at: <a href="http://demo.1976design.com/" name = "Teste de conteudo 04" title="Home">http://demo.1976design.com/</a></li>
<li>Dunstan's blog can be found at: <a href="http://1976design.com/blog/" name = "Teste de conteudo 05" title="To the blog">http://1976design.com/blog/</a></li>
</ul>

E a página toda está em anexo...


Estude o DOM ele fará muita diferença na sua vida como desenvolvedor...!
Não procure apenas fazer... procure sempre entender... amanhã você poderá precisar novamente...!

Abraçãooo!


Esse tópico é de javascript... vou colocar no lugar certo OK...!
Quando for postar verifique a seção correta...!

Attached Files


Edição feita por: André Manoel, 07/05/2010, 09:18.

Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#3 lprtrindade

lprtrindade

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 12/05/2010, 00:09

Rapaz... Achei que tinha respondido este tópico. Mais agora que eu vi que não teve uma resposta minha. :blink:
Mil desculpas. :(

Gostaria de agradêce-lo muito pela ajuda e boa vontade que teve comigo. Realmente era exatamente o que eu queria.
Obrigado também pela dica dos links do DOM. Andei dando uma lida aqui (ainda estou) e me ajudou bastante. Consegui fazer até umas outras modificações aqui.

E... Sem abusar, mais já abusando ^_^ , gostaria de fazer mais uma pergunta que não consegui fazer aqui.

Tipo tem como colocar o box de fundo com size automático !?
Tipo... Eu tenho um padrão fixo. Então tanto faz eu usar um texto com 20 carecteres como usar um com 5 caracteres, ele sempre vai sobrar um espaço grande no final. Que no caso eu não posso diminuir muito, porque se não corta os grandes.
Eu postei ae um arquivo "Teste.html" só pra você ter uma idéia do que estou falando. Observe no primeiro e no último link por exemplo, que você verá um espaço enorme depois do texto. Ao ponto que os links 02 e 03 possui um espacinho bem pequeno ao final do texto, antes de acabar a caixa de fundo.
Então eu não tenho como diminuir 'fixamente' a caixa, senão corta os textos grandes.
Tem como fazer com que ela fique automatica !? Tipo, se ajeite conforme o conteúdo !?
Para mudar o tamanho fixo dela, eu mexi em:

h_pixels = h*3;
t_pixels = t*7;

Observe que este ja é um valor menor do que o utilizado no primeiro post que fiz.

Obrigado mais uma vez pela ajuda.

Abração.
_____________________________________________________

Apenas fazendo um comentário extra, observe nesta screen que tirei, que o depois de upado o efeito é outro. Quando visto pelo PC, ele da um efeito, porém quando visto pelo arquivo upado que postei aqui, o efeito é outro. :huh:

Posted Image

Attached Files


Edição feita por: lprtrindade, 12/05/2010, 00:16.





2 user(s) are reading this topic

0 membro(s), 2 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq