Klick an stelle der Maus
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
-
Hallo Leute,
ich habe da eine Frage.
Ich möchte gerne das das ein Klick ausgelöst wird an der stelle wo sich gerade die Maus befindet.
Ich war jetzt am Googlen und konnte nichts richtiges dafür finden.
<script> function myFunction() { document.getElementById("click").click(); } </script>
Der Code sorgt ja dafür das wenn die Funktion myFunction ausgeführt wird das automatisch auf den element mit der ID click automatisch geklickt wird.
Wie kann ich dafür sorgen das dort geklickt wird wo sich aktuell die maus befindet?
Ich hoffe ich konnte es verständlich erklären -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo mybild,
ich verstehe die Frage nicht ganz. Soll der Click automatisch ausgelöst werden, wenn die Seite geladen wird bzw ist ?
Woher soll das Script wissen, wann es klicken soll ? Rufst Du es ihm zu, statt selbst zu klicken ?
Oder soll der Click ausgelöst werden, wenn Du einen bestimmten Bereich(Box oder Bild ...) mit der Maus überfährst.
Gruß Claus
Beitrag zuletzt geändert: 24.8.2022 8:33:26 von claushoffmann -
Hey,
Danke für deine Antwort.
Der Klick soll nach einem unsichtbaren Countdown ausgeführt werden.
Es geht darum das egal wo sich die Maus auf der Seite befindet das genau da der klick ausgeführt wird.
Also:
Seite wird geladen (Countdown startet) - User fährt zufällig mit Maus über Webseite (Countdown läuft langsam aus) - Countdown ist ausgelaufen der Klick wird genau da ausgeführt wo sich die Maus in diesen Moment befindet.
Ich hoffe das ist verständlicher ;) bin ziemlich schlecht im beschreiben... sorry -
Hallo mybild,
bei einem Click irgend wo hin kann natürlich nur was passieren, wenn das zufällig angeklickte Element auch einen Click-handler hat. Sonst clickt es zwar, aber es passiert gar nix !
Folgendes Script vor dem schließenden </body> einkopieren
<script id = "Only_Once_On_Start"> // Nur zur Kontrolle document.onclick = function(e) { alert("Grrr... Irgendwas hat mich angeklickt"); } // Timer starten setTimeout(randomClick, 3000); // 3 Sek. nach Aufruf // Erste Mausbewegung ( ... nach 3 Sekunden) löst aus function randomClick(){ // Mouse-Event installieren. document.onmousemove = function(e) { if(!e) e = window.event; var element = e.src || e.target; // Jetzt passiert es !!! element.click(); // Aufräumen: Events löschen document.setTimeout = null; document.onmousemove = null; document.onclick = null; // Radikales aufräumen : Script entfernen, Speicher freigeben document.getElementById("Only_Once_On_Start").remove(); } } </script>
Getestet mit Edge und Chrome und Firefox.
Das lässt sich zwar eleganter lösen ... funzt aber und zeigt das Prinzip.
Wärest Du so nett, mir zu erzählen welchen Zweck deine Idee haben soll.
das interessiert mich wirklich !!!
mso-profi@web.de falls es privat bleiben soll !
Gruß
Claus
Beitrag zuletzt geändert: 27.8.2022 12:26:21 von claushoffmann -
sehr ineffizient. Das ist
wenn du grob events auslösen willst, kannst du mit einem mouseOver auf den Elementen arbeiten.
willst du feiner klicken, lässt du dir nach abgelaufener Zeit die Mausposition ausgeben und verarbeitest die mausposition entsprechend weiter.
Ich wüsste keinen Sinnvollen Anwendungsbereich, einen klick auszulösen, außer, man ist als bot unterwegs und will mittels greasemonkey oder ähnlichen Tools irgendwas auf fremden Webseiten zur Ausführung bringen. da kommt man trotzdem effizienter davon, wenn man sich die Elemente zieht und die Events direkt auslöst. Da ich aber von den vielen Captchas mittlerweile genervt bin ,die es über all gibt, die dann noch zu den aufwändigen cookie-notices dazu kommen, werde ich das nicht unterstützen^^ -
Hallo Sebulon,
also ich weiß nun leider nicht, wie man die Mauskoordinaten bekommt, wenn kein Mausevent ausgelöst wurde.
Sämtlichen Elementen ein Mouseover zu verpassen halte ich auch nicht für effizient, da es ja nur einmalig beim Start geschehen soll.
Da meine Vermutung war, dass mybild möglicherweise eine Fremdseite steuern will, habe ich nach dem Grund bzw Sinn gefragt. Ich kenne nämlich keine Methode, wie man einen Click-event (oder eigene Scripts) in eine fremde Seite einbauen kann, welche gerade geladen wird.
Mag sein dass mein Vorschlag ineffizient ist, aber bisher ist er der Einzige. Von Dir kommt ja nix !!
Gruß Claus
. -
claushoffmann schrieb:
[...]
Mag sein dass mein Vorschlag ineffizient ist, aber bisher ist er der Einzige. Von Dir kommt ja nix !!
Gruß Claus
.
Hallo Claus,
vielleicht solltest du nochmal lesen.
wenn du grob Events auslösen willst, kannst du mit einem mouseOver auf den Elementen arbeiten.
willst du feiner klicken, lässt du dir nach abgelaufener Zeit die Mausposition ausgeben und verarbeitest die mausposition entsprechend weiter.
1. Handlungsgesteuert. Nachteil ist, du kriegst die Koordinaten nur beim eintritt des Events, nicht bei mausbewegungen.
2. Zeitgesteuert. wurde im 2. Post des TE erläutert, dass dieses Event sowieso existiert, dann kann er sich da gleich einhaken.
Somit habe ich anders, als von dir behauptet, schon 2 Vorschläge gebracht. faktisch deckt sich der 2. Vorschlag mit deinem Codesnippet, nur dein Codeschnipsel ist echt grausig.
Start-Auslöser für jegliche Event-Registrierung Benutzerseitiger Aktivitäten sollte immer ein document.ready() sein. damit verhindere ich null-pointer Exceptions, weil dann nicht auf Elemente referenziert wird, die es noch nicht gibt.
Ansonsten sind sinnige event-Registrierungen onClick, onMouseOver, onMouseOut, onKeydown, onKeyUp(gerade für Ajax auf suchfeldern interessant, erst beim loslassen der Taste die Suche auszulösen.
und ich schicke für derartig banale Themen bewusst keine CodeSnippets, sonst hat es bei TE keinen Mehrwert. Bei einer Recherche könnten sich auch andere Lösungsansätze ergeben, die für den Einsatzzweck besser geeignet ist, als aus dieser Frage des TE ersichtlich und zukünftige potentielle Fehlerquellen reduziert.
Soll ich dir noch erklären, warum dein Script grausig ist?
du hast ein Risiko einer Mehrfachausführung und versuchst das zu reduzieren, indem du das Script nach Ausführung entfernst? Oder willst du nicht, dass jemandem schlecht wird, wenn er den Code in den EntwicklerTools sieht, weshalb du die gleich löscht?
Angesichts der Methode würde ich vermuten, dass du bei grey-/black-hats unterwegs bist. Derartige Frickeleien, die lediglich dazu dienen, dass die Funktionalität der Webseite versteckt wird, ggf. vorher noch durch den Obfuscator gejagt, damit Webschutz-Module der Antivirenhersteller/Werbeblocker nicht darauf reagieren, habe ich überwiegend von Angreifern aus Indien beobachten können, um eigene WerbeIDs auf fremden (Firmen-)Webseiten zu verstecken, um selbst Geld zu verdienen.
Warum nimmst du keinen Event-Handler, wie document.ready(), um derartige Funktionalität sauber zu verankern? der wird garantiert nur einmal ausgeführt, wenn die Webseite vollständig geladen wird. schreibt sich mit jquery-Erweiterung auch einfacher.
Das onMouseMove-Event ballert durchweg, hat aber Probleme mit margins. Früher hatte es auch Probleme mit drüber liegenden Layern, was dazu führte, dass man das Event auf allen untergeordneten DOM-Objekten registrieren musste... was wiederum dazu führte, dass die Position nur relativ zum Koordinatenursprung des Elements ermittelt werden konnte und nacherrrechnet werden musste, auf dem sich der Zeiger befand, was man mit der Übergabe der relativen Position des Elements im Dokument löste.
alles weitere würde nur die Entwicklung von Clickbots fördern, deswegen gehe ich nicht tiefer darauf ein. Solltest du an der Stelle auch nicht, so lange nicht geklärt ist, was bezweckt werden soll. damit der TE sauber damit klar kommt, muss er sowieso die Thematik es Eventhandlings verstehen. Deswegen bringt es nur etwas, die richtige Tür zu zeigen, den Weg muss er alleine beschreiten.
-
Hallo Sebulon
Das nächste Mal mache ich es anders.
Ich gehe in ein anderes Forum und teile dort mit, dass jemand bei Lima-City eine Anfrage gestellt hat, auf die ich vielleicht einen Lösungsansatz hätte.
Diesen Lösungsansatz stelle ich dann in diesem Forum mit der Frage vor, ob ich den gefahrlos bei Lima-City posten kann, ohne das mich ein Sebulon in Grund und Boden stampft.
Ich entschuldige mich für die Worte "... von Dir kommt ja nix". Eine Belehrung ist natürlich auch etwas.
Soooo... Ironie aus!
sebulon schrieb:
... willst du feiner klicken, lässt du dir nach abgelaufener Zeit die Mausposition ausgeben und verarbeitest die mausposition entsprechend weiter.
Frage: Der Timer-Event liefert keine Mauskoordinaten ... also ... wie fragst Du die Mausposition ab ?
sebulon schrieb:
Das onMouseMove-Event ballert durchweg ...
Durch das späte Einbinden des onMouseMove-Event (hier nach 3 Sekunden) und der unmittelbaren Verarbeitung des Events feuert dieser genau ein einziges Mal, wenn die Maus auch nur einen einzigen Pixel bewegt wird.
sebulon schrieb:
Das klingt schon fast wie ein Kompliment ... wenn da nicht dieses miserable Codeschnipsel wäre ...
Angesichts der Methode würde ich vermuten, dass du bei grey-/black-hats unterwegs bist....
Der Begriff Single-Page und generischer Dom - Aufbau sagt Dir bestimmt etwas.
Also: Ich habe eine Single-Page in die ich dann generisch erzeugte Tools wie Kalender, Notizen, Uhr und alle möglichen anderen Codeschnipsel nacheinander nachladen und wieder rausschmeissen (also aufräumen ) kann, damit die Seite nicht immer länger und länger und ... und langsamer wird ...
Also: Keinerlei Absicht, irgend etwas zu verstecken (...obwohl ich das Deiner Meinung nach, bei der Qualität meines Codes besser tuen sollte ...)
Und da man Webseiten auch runterladen kann, ohne diese ausführen zu lassen ... würde das Verstecken von Codeschnipseln gar nicht klappen und ich wäre enttarnt.
Deinen Worten entnehme ich, das Du vermutlich professionell in der Programmierung unterwegs bist.
Da kann ich als Hobbyist natürlich nicht mithalten.
Mein erster Rechner war ein Comodore C16 mit 2 Kilobyte freiem Speicher. Eine Speicherweiterung mit weiteren 2Kilobyte kostete 200 DM. Also ~10 Pfennig pro Byte bzw ~1,125 Pfennig pro Bit.
Gespeichert wurde auf einer Datasette (= Abgespeckter Kassettenrekorder mit Zählwerk) für 60DM.
Die notwendige Sparsamkeit mit Speicher habe ich mir wohl noch nicht abgewöhnt, obwohl ich das auch heute noch für ratsam halte.
Als ich mal eine Fremdseite ferngesteuert habe, habe ich das mit VBA aus Excel inclusive Windows-Routinen für die Maussteuerung realisiert. Es ging darum, beim Roulette bestimmte Gewinnstrategien automatisiert auszutesten und Excel bietet eine einfache Möglichkeit, Diagramme in Echtzeit zu erstellen. Alles mit Spielgeld und somit nicht illegal. War auch besser so, sonst wäre es nämlich echt teuer geworden!
Deine Vorsicht bezüglich, niemanden bei irgendwelchem Mist zu ünterstützen, halte ich zwar für ehrenwert, bin aber der Meinung das man jemanden der Böses will damit zwar ausbremsen kann, aber nicht aufhalten. Wenn er es wirklich will, wird er es auch finden.
Sinn dieses Posts soll sein, Frieden zu stiften. Sollte er das nicht tuen, sind meine sprachlichen Fähigkeiten wohl genauso miserabel wie meine Codeschnipsel. Dann tut es mit leid.
Mit freundlichen Grüßen
Claus Hoffmann
Beitrag zuletzt geändert: 7.9.2022 12:01:00 von claushoffmann -
claushoffmann schrieb:
[...]
Hallo Claus,
Entschuldigung angenommen. Kein böses Blut. Ich bin bei der Thematik ineffizienter Code etwas ausdrucksstärker, weil ich einige Jahre mich damit rumplagen durfte/musste...
Die Kooordinaten kriegst du ganz einfach hier:
https://www.w3schools.com/jsref/event_clientx.asp
wenn du so faul bist wie ich, manipulierst du in der Demo("Try it yourself"-Button) den Body auf:
<body onMouseMove="showCoords(event)" style="border: 1px solid green;">
und weißt auch gleich, warum er andere Bereiche nicht erfasst. So lange die Maus im Body ist, egal welches Div drübergelegt ist, bekommst du mit der Referenzierung auf das Event auch die Koordinaten, von dem das Mousemove ausgelöst wurde.
Diese Koordinaten speicherst du in eine globale variable und kannst vom Timer-Event darauf zugreifen. Dabei handelt es sich zwar nur um die letzte bekannte Koordinate, das heißt, wenn der Browser den Fokus verliert und die Maus außerhalb bewegt wird, weiß er natürlich nix von der neuen Position. Aber das ist technisch auch nicht gewollt, deswegen sind Browser auch Sandbox-Anwendungen. sollte es einen Weg drumherum geben, sollte das als CVE gemeldet werden.
Ansonsten schreibe ich seit jahren nur in jquery, weil natives js ist mir viel zu umständlich
-------------------------------
document.elementFromPoint(x, y).click();
würde dann den Rest des Jobs erledigen
Was die Sparsamkeit angeht, gehe ich mit dir eine Richtung. Dass du die Events löscht, wenn sie nicht mehr gebraucht werden, finde ich sehr löblich.
wenn du aus dem Beispiel von oben jetzt noch den Script-Block in die Richtung modifizierst:
var i = 0; function showCoords(event) { var x = event.clientX, y = event.clientY; var coords = "X coords: " + x + ", Y coords: " + y; document.getElementById("demo").innerHTML = coords; if(0==i++) { setTimeout(function() { alert(document.elementFromPoint(x, y).innerHTML);}, 3000); } }
das ist jetzt quick and dirty, der timer ist mit Auslösung des Events angetriggert und nicht mit document.ready, aber das in diese Richtung umzubauen ist auch kein Hit mehr.
shit, jetzt hab ich doch ein Codesnippet gepostet...
Speicher freigeben im Browser sehe ich auch nicht mehr so sinnvoll, die Mühe und die Codezeilen kann man sich sparen, zumal alles übertragene Datenmenge ist. das Problem der heutigen Zeit ist eher die Menge der Sinnlos übermittelten Daten und weniger die lokale Ausführungszeit. Ich würde sowieso alle nicht-kaufmännischen Berechnungen etc. beim Client vor Ort machen lassen, um Serverressourcen zu sparen. Kommentare würde ich auch nicht mehr ausliefern, die würde ich mit einem $debug==true rausfiltern und gar nicht erst darstellen.
Hier würde ein Kompressor/Obfuscator hilfreich sein, die Original würde ich nur vor Ort liegen lassen, um sicher zu stellen, dass man den Code noch anpassen kann
https://jscompress.com/
Des weiteren muss geprüft werden, ob der Code groß genug ist, dass ein separater request ausgelöst wird, um die Datei zu beziehen, oder der Code eingebettet wird. unter 1kb würde ich den Code immer einbetten.
grüße,
sebulon -
Hi Sebulon
schön dass Du geantwortet hast.
...weil ich einige Jahre mich damit rumplagen durfte/musste...
.
Genau sowas hatte ich mir gedacht, als ich Deine Antwort las. Vermutlich ein Code-Reviewer ....
Mein erster Code (den ich nicht gepostet habe) war ähnlich Deinem. Um globale Variablen zu vermeiden hatte ich die Koordinaten sogar im sessionStorage zwischen gespeichert.
Wegen der vielen onmousemove Events hatte ich mich dann dazu entschieden, diesen nur temporär (genau für einen Event) einzubinden.Naja, und wenn schon temporär .. dann kann auch alles wieder weg.
Das Ziel der Anfrage war ja auch nicht gerade gut ersichtlich.
In jQuery hab ich mich auch mal eingelesen (Bei W3-Shools) und ausprobiert. Sehr bequeme Sache.
Aber es widerstrebt mir Code einzubinden, den ich selbst nicht verstehe. (hab ich zumindest derzeit nicht, ... das war mir zu suspekt). Es stellte sich mir die Frage ... Willst Du Javascript lernen ... oder Libraries. Was ist wenn die wieder verschwinden ? So wie der Atari 520ST in den ich 10 Jahre Lernarbeit gesteckt hatte.
um Maschinensprache und Multitasking zu begreifen.
Gott Sei Dank, hab ich meine Computerinteressen niemals kommerziellen Zwecken unterordnen müssen.
Ich hab mich rein Ideengesteuert entwickelt. Das war keine Arbeit, sondern reine Neugier und Lust.
Naja und Faulheit, da ich erhoffte irgendwann weniger Arbeiten zu müssen, wenn ich automatisieren erlerne.
Trugschluss !!!
Gruß Claus
Beitrag zuletzt geändert: 14.9.2022 15:00:57 von claushoffmann -
Hi Claus,
nein, kein Code-Reviewer... sagen wir es so, ich war erst in der Softwareentwicklung bei unterschiedlichen Unternehmen, von rein öffentlicher Dienst, Systemhaus, reine Softwarebude und zwischendrin auch Consulting und Werbeagentur... den schlimmsten Code hatte ich in der Werbeagentur gesehen, aber auch nicht verwunderlich, wenn Projektzeiten für komplexe Projekte für 1 Personenmonat Aufwand in 3 Tagen erledigt werden sollen... da kommt nur Pfusch bei raus...
Als admin/root hatte ich zahlreiche gestorbene Projekte, die aber mittlerweile Geschäftskritisch wurden, dass man sich Gedanken machen musste, die umzubauen, dass sie updatefähig und Sicher werden... da sieht man einige Leichen im Keller und macht sich Gedanken, warum das so gebaut wurde... viele Dinge waren einfach ersichtlich, dass die Ursprünglichen Programmierer aus einer anderen Welt kamen und deswegen die "Grammatik" dieser Sprachen noch nicht beherrschten und ihre alten Gewohnheiten dort verbaut hatten...
jquery kann ich dir nur empfehlen, es ist mittlerweile ein extrem solides Framework geworden, seit 17 Jahren in der Entwicklung und verhält sich weitaus zuverlässiger als Java(ok, was durchaus keine Kunst ist...) im Endeffekt kannst du trotzdem wie in JavaScript schreiben, hast aber viele vereinfachte Selektoren, die sehr performant sind. Früher, also als jquery noch in den Kinderschuhen war, war die Hauptintention dieses Frameworks gerade die unterschiedlichen Interpretationseigenheiten der Browser so unter einen Hut zu bringen, damit man nicht mehr für Firefox, Internet-Explorer und Chrome getrennt die Scripte basteln musste, sondern alles unter einen Hut bekam. genau so gab es für CSS eine Standard-CSS, normalizr
nicolasgallagher.com/about-normalize-css/
um die Unterschiedlichen Vordefinitionen in den Browsern zu vereinheitlichen.
Wie gesagt, die Web-Welt programmiert sich etwas anders als die Maschinennahe-Welt... hier sind so viele Ebenen nochmal zwischengeparkt, dass es keinen Sinn ergibt, dort sich festzubeißen.
Wenn du den jquery-Code verstehen willst, kannst du gerne hier nachlesen:
https://code.jquery.com/jquery-3.6.1.js
Wenn 70% aller Webseiten auf jquery fußen, kannst du auch darauf vertrauen, dass das hier durchaus repräsentativ ist:
https://www.cvedetails.com/product/11031/Jquery-Jquery.html?vendor_id=6538
im Vergleich hierzu:
https://www.cvedetails.com/vendor/26/Microsoft.html
erscheint es mir doch recht zuverlässig... auch wenn ich hier Äpfel mit Birnen vergleiche... bei oracle sieht es ähnlich aus, wenn man sich jetzt aber die JRE rannimmt als Referenz:
https://www.cvedetails.com/product/19117/Oracle-JRE.html?vendor_id=93
dann kann man schon sehen, dass man mit jquery durchaus entspannt in die Zukunft sehen kann... es ist nicht so mächtig, aber für den Großteil der üblichen Client-Seitigen Anwendungsbereiche mehr als ausreichend, auch hinter dem Aspekt, dass JavaScript durch node.js etwas Aufwind erhalten hat(wovon ich aber wiederum kein Fan bin)
Grüße,
sebu -
Hallo Sebulon,
das Wort Code-Reviewer hatte ich keinesfalls negativ gemeint. In meiner Vorstellung (mangels praktischer Erfahrung) ist das die Person des Programmierteams, welche die erfahrenste und best-programmierende ist.
Diese erkennt schon den ersten Fehler, bevor die erste Seite überhaupt vollständig aufgebaut ist.
(Bin grade ganz stolz auf mich, da ich das dämliche Gendern elegant umgangen habe Hihi)
Alles in Allem muss ich sagen, das ich trotz des etwas holprigen Einstiegs wertvolle Tipps und Hinweise von Dir bekommen habe !
Da MyBild kein weiteres Interesse gezeigt hat, nehme ich an, dass er erkannt hat auf dem Holzweg zu sein, oder bereits eine für sich zufriedenstellende Lösung gefunden hat.
Wie sagt man bei EBAY ..... Gerne wieder
Mit freundlichem Gruß
Claus
Nachtrag: Entweder bin ich zu blöde es zu finden ... oder ich hab keine Berechtigung Deine Posts (außer dem Ersten ) positiv zu bewerten.
Beitrag zuletzt geändert: 15.9.2022 12:54:13 von claushoffmann -
Hey!
Ich verstehe deine Frage nicht ganz, aber wenn du einfach einen Klick auslösen möchtest, ohne das die Maus wirklich klickt kannst du das mit mouseover() machen
Ich hoffe ich konnte dir helfen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage