• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Toolbox Ohne jQuery

JinZazama

New member
Hi,
Vorab ich hab bis jetzt mit Javascript nie gearbeitet es ist mein erster versuch.
Ich möchte eine Toolbox realisieren, die über ein Klick geöffnet wird. Für eine MouseOver Toolbox würde ich reines CSS verwenden da ich dieser aber über ein Click steuern möchte, bin ich auf JS angewiesen.
Die Google suche hab ich bereits verwendet aber dort gibt es nur beispiele mit jQuary, welches ich aber nicht verwenden möchte.
ich krieg es zwar hin das eine Toolbox erzeugt wird, diese aber nicht wieder geschlossen werden kann.
Im Idealfall soll diese geschlossen werden wen ich aus der Toolbox rausklicke aber über ein Button bzw ein Link ist es auch O.K.

mein Code: http://jsfiddle.net/3yh7S/
bzw.
Code:
var posx = 0,
    posy = 0,
    on = false,
    tooltipp_box = document.createElement('div'),
    tooltipp = document.createElement('div'),
    tooltipp_arrow = document.createElement('div'),
    close_link = document.createElement('a'),
    tipptext = document.createTextNode(toolbox_on.title),
    closetext = document.createTextNode("Schließen");

tooltipp_box.id = "tooltipp_box";
close_link.href = "#";
close_link.id = "toolbox_off";
close_link.title = "Schließen"
tooltipp.className = "tooltipp";
tooltipp_arrow.className = "tooltipp_arrow";

document.onmousemove = function (e) {
    posx = e.pageX || event.clientX + document.body.scrollLeft;
    posy = e.pageY || event.clientY + document.body.scrollTop;
};

document.getElementById('toolbox_on').onclick = function () {
    if (on == false) {
        tooltipp_box.style.left = posx - 30 + "px";
        tooltipp_box.style.top = posy + 10 + "px";
        document.body.appendChild(tooltipp_box);
        tooltipp_box.appendChild(tooltipp);
        tooltipp_box.appendChild(tooltipp_arrow);
        tooltipp.appendChild(tipptext);
        tooltipp.appendChild(close_link);
        close_link.appendChild(closetext);
        on = true;
    } 
}

document.getElementById('toolbox_off').onclick = function () {
    document.body.removeChild(tooltipp_box);
    on = false;
}
über .style=display:block; und .style=display:none; will ich es auch nicht machen da ich unnötige Ladezeiten vermeiden will.

vielleicht gibt es ja jemanden hier der mir helfen kann bzw. will

Danke schon mal im Voraus
 
Zuletzt bearbeitet von einem Moderator:
AW: Toolbox Ohne jQuary

Wieso versteckst du beim Klick auf "Schließen" nicht einfach die "Toolbox" per
Code:
document.getElementById("ID der Tooltips").style.display = "none";
? Genauso könntest du es auch beim Öffnen des Tooltips machen, nämlich dass du ihn schon davor ausgeblendet im HTML einfügst und dann im onclick nur noch mit
Code:
document.getElementById("ID des Tooltips").style.display = "block";
sichtbar machst...

PS: ich hab noch nie in meinem Leben jQuary benötigt ;)



EDIT: hab gerade erst
über .style=display:block; und .style=display:none; will ich es auch nicht machen da ich unnötige Ladezeiten vermeiden will.
gelesen, sorry. Allerdings kann ich das Argument mit der Ladezeit ehrlich gesagt nicht nachvollziehen...
 
Zuletzt bearbeitet:
AW: Toolbox Ohne jQuary

Wieso versteckst du beim Klick auf "Schließen" nicht einfach die "Toolbox" per
Code:
document.getElementById("ID der Tooltips").style.display = "none";
? Genauso könntest du es auch beim Öffnen des Tooltips machen, nämlich dass du ihn schon davor ausgeblendet im HTML einfügst und dann im onclick nur noch mit
Code:
document.getElementById("ID des Tooltips").style.display = "block";
sichtbar machst...

PS: ich hab noch nie in meinem Leben jQuary benötigt ;)
wie bereits gesagt
über .style=display:block; und .style=display:none; will ich es auch nicht machen da ich unnötige Ladezeiten vermeiden will.
 
AW: Toolbox Ohne jQuary

Genau aus diesem Grund hatte ich auch noch das "EDIT" eingefügt.
Ich kann wie gesagt das mit der Ladezeit nicht nachvollziehen. Könntest du das näher erläutern?
Und außerdem gilt das Argument ohnehin nicht für das Schließen des Tooltips, wieso solltest du den nicht einfach ausblenden können? Das hat nun mal wirklich nichts mit irgendeiner Ladezeit zu tun...
 
Zuletzt bearbeitet:
AW: Toolbox Ohne jQuary

wieso soll unnötig HTML Code dargestellt werden als vom User gebraucht wird? dieser soll erst geladen werden wen dieser wirklich benötigt wird, in dem kleinen Beispiel ist ein ein Kleiner Text wenn ich aber ein Langen Text hab dann ist es verschenkter platz und ich hab ein ellenlangen Code, wen ich keine alternative finde werde ich wohl mit display:block; bzw none; arbeiten aber bis dahin will ich auch eine andere Version probieren. Gut wehre auch das man Abfragen könnte ob der User JS an oder aus hat, dann würde der Tooltip über CSS erzeugt, wie ich aber das abfragen kann weis ich leider nicht, wie gesagt bin ein totaler JS Noob
 
AW: Toolbox Ohne jQuary

wieso soll unnötig HTML Code dargestellt werden als vom User gebraucht wird? dieser soll erst geladen werden wen dieser wirklich benötigt wird, in dem kleinen Beispiel ist ein ein Kleiner Text wenn ich aber ein Langen Text hab dann ist es verschenkter platz und ich hab ein ellenlangen Code
Aber du lädst ja den Tooltip nicht irgendwo per Ajax o.ä. vom Server, sondern hast den ja auch in einer JS-Datei. Von daher, wo soll da bitte der Unterschied sein, ob das jetzt im JS oder im HTML steht? :confused:
 
Also ich würde die Tooltips auf jeden Fall ins HTML schreiben (den Text musst du so oder so irgendwann übertragen...) und per CSS mit Funktionalität versehen. Damit sehen auch Leute, die JS deaktiviert haben was, etwas.

Wenn du dann das Klicken noch haben willst, kannst du ja das JS dann noch oben drauf setzten:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<style type="text/css">
.hasTooltip {
	position: relative;
}

.hasTooltip .tooltip {
	position: absolute;
	top: 50%;
	left: 75%;
	background-color: lightblue;
	display: none;
	z-index: 3;
}
.hasTooltip:hover .tooltip {
	display: block;
}
.hasTooltip.js:hover .tooltip {
	display: none;
}
</style>
</head>
<body>
<span class="hasTooltip">click for tooltip
	<span class="tooltip">blablabla</span>
</span>
<span class="hasTooltip">click for tooltip2
	<span class="tooltip">blablabla2</span>
</span>
<span class="hasTooltip">click for tooltip3
	<span class="tooltip">blablabla3</span>
</span>
<br><br>
click to remove
<script type="text/javascript" src="//kkjs.kkapsner.de/modules/kkjs.load.js"></script>
<script>
(function(){
	var hasTooltip = kkjs.css.$(".hasTooltip");
	kkjs.css.className.add(hasTooltip, "js");
	kkjs.event.add(
		hasTooltip,
		"click",
		function(){
			kkjs.css.set(kkjs.css.$(".tooltip"), "display", "");
			kkjs.css.set(kkjs.css.$(".tooltip", {node: this}), "display", "block");
		}
	);
	kkjs.event.add(document, "click", function(ev){
		if (!hasTooltip.some(function(hasTooltip){
			return hasTooltip.contains(ev.target);
		})){
			kkjs.css.set(kkjs.css.$(".tooltip"), "display", "");
		}
	});
}());
</script>
</html>
- ist jetzt zwar mit meinem Framework, aber geht auch mit vanilla JS - ist nur etwas mehr Code.

Der Checkbox-hack scheint mir für einen Tooltip nicht gut geeignet zu sein, da man ja eigentlich nur einen Tooltip gleichzeitig sehen sollte und auch das Verschwinden über einen Klick irgendwo anders ist damit nicht machbar. Eventuell kann man da etwas mit Radiobuttons machen, hab' das aber noch nicht ausprobiert...
 
Zurück
Oben