Ajouter une valeur alt d’image à la position de la souris lorsque l’image est déplacée dans la zone de texte

J’ai une zone de texte que les utilisateurs peuvent remplir sur mon site Web. Voici un exemple de ce que je veux faire:

Lorsque les utilisateurs commentent les publications d’autres personnes dans cette zone de texte, ils ont un ensemble d’images emoji à sélectionner. Je veux que les utilisateurs cliquent sur l’emoji qu’ils souhaitent choisir (puis qu’une bordure apparaît autour de celui-ci). Il peut ensuite cliquer une fois dans la zone de texte où il souhaite coller du texte. Ce texte alt atsortingbut alt de l’image. Cela permet à l’utilisateur de gagner du temps lors de l’écriture des codes de caractères emoji.
J’ai essayé une partie du code moi-même, mais je ne suis pas sûr du JavaScript. Voici ma tentative …

Mon CSS …

 img:hover { border:1px solid blue } 

Et mon HTML …

 {smiley001}{smiley002}{smiley003}{smiley004}{smiley005}

Existe-t-il une solution javascript / jquery?

Si ce n’est pas possible, y a-t-il moyen de le faire avec du texte au lieu d’images, l’atsortingbut title étant copié dans la zone de texte?

Regarde ce violon . J’ai trouvé une fonction “insérer à l’emplacement de la souris” de cette question .

Le rest est simple. Ajoutez un événement click pour enregistrer l’atsortingbut alt de l’image sur laquelle vous avez cliqué et un autre événement click dans la zone de textarea pour insérer le code alt. Il suffit de cliquer sur l’image, puis de cliquer à l’endroit où vous souhaitez que le code alt s’affiche.

 selected = ''; $('img').click(function(){ console.log($(this).attr('alt')); selected = $(this).attr('alt'); }); $('#comments').click(function(){ insertAtCaret('comments',selected) // Clear the selection so it isn't copied repeatedly selected = ''; }); // Copied from the linked answer function insertAtCaret(areaId,text) { var txtarea = document.getElementById(areaId); var scrollPos = txtarea.scrollTop; var strPos = 0; var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false ) ); if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart ('character', -txtarea.value.length); strPos = range.text.length; } else if (br == "ff") strPos = txtarea.selectionStart; var front = (txtarea.value).subssortingng(0,strPos); var back = (txtarea.value).subssortingng(strPos,txtarea.value.length); txtarea.value=front+text+back; strPos = strPos + text.length; if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart ('character', -txtarea.value.length); range.moveStart ('character', strPos); range.moveEnd ('character', 0); range.select(); } else if (br == "ff") { txtarea.selectionStart = strPos; txtarea.selectionEnd = strPos; txtarea.focus(); } txtarea.scrollTop = scrollPos; } 

Le code javascript de base devrait être quelque chose comme:

 function write_tag() { var text = this.getAtsortingbute("alt"); getElementById("textarea").innerHTML += text; } 

Dans ce cas, le texte serait ajouté à la fin du contenu de textarea. Un code plus complexe devrait vérifier où se trouve le curseur et tenter d’insérer le texte à cet endroit de la chaîne.

L’écouteur qui déclenche la fonction peut être ajouté à la balise d’image:

 {smiley001} 

Il serait plus judicieux d’append l’auditeur par programmation, mais c’est une autre histoire: vous devez décider si vous voulez que le javascript soit inséré dans la page ou dans une page externe. Dans ce cas, vous devez attendre le chargement complet de la page, puis append des écouteurs pour tous. images. Si vous utilisez jQuery, vous pouvez écrire quelque chose comme ceci, en supposant que tous vos émojis soient dans une div avec la classe “emojis”:

 $(document).ready(function(){ $(".emojis img").bind("click",write_tag); } 
  var front = (txtarea.value).subssortingng(0,strPos); var back = (txtarea.value).subssortingng(strPos,txtarea.value.length); txtarea.value=front+text+back; strPos = strPos + text.length; if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart ('character', -txtarea.value.length); range.moveStart ('character', strPos); range.moveEnd ('character', 0); range.select(); } else if (br == "ff") { txtarea.selectionStart = strPos; txtarea.selectionEnd = strPos; txtarea.focus(); } txtarea.scrollTop = scrollPos; 

}