2017-05-03 3 views
3

Ich versuche, eine einfache "klicken, um Text in Zwischenablage kopieren" -Funktion zu erstellen, und ich habe eine harte Zeit zu versuchen, mein Javascript zu schreiben, so dass die verschiedenen Ereignisse nicht schneiden. Jedes Mal, wenn ein Benutzer auf textarea schwebt, möchte ich, dass das Textfeld die Hintergrundfarbe ändert und "Klicken zum Kopieren" sagt, und wenn Sie tatsächlich klicken, ändert der Textbereich die Farbe in etwas anderes und sagt "kopiert".Wie kann ich nicht auf Mouseenter- und Mouseave-Ereignisse warten, während ein Zeitlimit ausgeführt wird?

Jedes Mal, wenn ein Benutzer auf der Textfläche schwebt, sollte es idealerweise das Gleiche tun. Aber jetzt, wenn ich auf Kopieren klicke, und dann den Textbereich verlassen und zurückkommen, überlappt sich der Text. Wie kann ich sicherstellen, dass die Set-Timeout-Funktion vollständig ausgeführt wird, und erst dann wieder die Ereignisse mouseenter und mouseleave abgehört?

, außerdem ist hier der Code:

var pixelCodeTextarea = $("#tracking_html"), 
 
      textareaCopiedText = $('#pixel_textarea_copy'), 
 
      textareaCopiedText2 = $('#pixel_textarea_copied'), 
 
      textareaWrapper = $('#pixel_textarea_wrapper'); 
 
    
 
     textareaWrapper.mouseenter(function() { 
 
      textareaCopiedText.removeClass('hidden'); 
 
      pixelCodeTextarea.css('background-color', '#f1f8fb'); 
 
     }).mouseleave(function() { 
 
      textareaCopiedText.addClass('hidden'); 
 
      pixelCodeTextarea.css('background-color', 'transparent'); 
 
     }); 
 

 
     pixelCodeTextarea.on('click', function() { 
 
      textareaCopiedText.addClass('hidden'); 
 
      pixelCodeTextarea.css('background-color', '#bbcadc'); 
 
      textareaCopiedText2.removeClass('hidden'); 
 

 
     window.setTimeout(function() { 
 
      pixelCodeTextarea.css('background-color', 'transparent'); 
 
      textareaCopiedText2.addClass('hidden'); 
 
     }, 1500); 
 
     });
 .hidden { 
 
      display: none; 
 
     } 
 

 
     .textarea_wrapper { 
 
      position: relative; 
 
      max-width: 500px; 
 
     } 
 

 
     .textarea_copy_code, 
 
     .textarea_copy_codied { 
 
      position: absolute; 
 
      top: 60px; 
 
      left: 180px; 
 
      font-weight: 600; 
 
      text-transform: uppercase; 
 
      font-size: 10px; 
 
     } 
 

 
     #tracking_html { 
 
      max-width: 500px; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="pixel_textarea_wrapper" class="textarea_wrapper"> 
 
     <div id="pixel_textarea_copy" class="textarea_copy_code hidden">Copy code to clipboard</div> 
 
     <div id="pixel_textarea_copied" class="textarea_copy_codied hidden">Copied to clipboard</div> 
 
     <textarea id="tracking_html">Hello this is code</textarea> 
 
</div>

+0

Ich bin nicht in der Lage, Ihr Problem zu verstehen. Die Geige funktioniert gut ohne Überschneidungen. Fehle ich etwas? – Aslam

+0

Klicken Sie dann erneut auf das Textfeld @hunzaboy – Albzi

+0

Sie haben zwei Divs, die an der gleichen Stelle angezeigt werden, aber unabhängig voneinander angezeigt/ausgeblendet. Ich empfehle, den zweiten Text einfach zu verstecken, wenn Sie den ersten zeigen: https://jsfiddle.net/yLug0fhk/2/ Alternativ können Sie überprüfen, ob der zweite Text gerade angezeigt wird, wenn Sie den ersten zeigen (was ich glaube als Antwort bereits zur Verfügung gestellt). –

Antwort

1

Sie dies tun können:

var pixelCodeTextarea = $("#tracking_html"), 
 
    textareaCopiedText = $('#pixel_textarea_copy'), 
 
    textareaCopiedText2 = $('#pixel_textarea_copied'), 
 
    textareaWrapper = $('#pixel_textarea_wrapper'); 
 
    
 
textareaWrapper.mouseenter(function() { 
 
if (textareaCopiedText2.hasClass('hidden')) { 
 
    textareaCopiedText.removeClass('hidden'); 
 
    pixelCodeTextarea.css('background-color', '#f1f8fb'); 
 
    } 
 
}).mouseleave(function() { 
 
    textareaCopiedText.addClass('hidden'); 
 
    pixelCodeTextarea.css('background-color', 'transparent'); 
 
}); 
 

 
pixelCodeTextarea.on('click', function() { 
 
    textareaCopiedText.addClass('hidden'); 
 
    pixelCodeTextarea.css('background-color', '#bbcadc'); 
 
    textareaCopiedText2.removeClass('hidden'); 
 

 
    window.setTimeout(function() { 
 
    pixelCodeTextarea.css('background-color', 'transparent'); 
 
    textareaCopiedText2.addClass('hidden'); 
 
    }, 1500); 
 
});
.hidden { 
 
    display: none; 
 
} 
 

 
.textarea_wrapper { 
 
    position: relative; 
 
    max-width: 500px; 
 
} 
 

 
.textarea_copy_code, 
 
.textarea_copy_codied { 
 
    position: absolute; 
 
    top: 60px; 
 
    left: 180px; 
 
    font-weight: 600; 
 
    text-transform: uppercase; 
 
    font-size: 10px; 
 
} 
 

 
#tracking_html { 
 
    max-width: 500px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="pixel_textarea_wrapper" class="textarea_wrapper"> 
 
    <div id="pixel_textarea_copy" class="textarea_copy_code hidden">Copy code to clipboard</div> 
 
    <div id="pixel_textarea_copied" class="textarea_copy_codied hidden">Copied to clipboard</div> 
 
    <textarea id="tracking_html">Hello this is code</textarea> 
 
</div>

Der Code im Einzelnen:

textareaWrapper.mouseenter(function() { 
    if (textareaCopiedText2.hasClass('hidden')) { 
    textareaCopiedText.removeClass('hidden'); 
    pixelCodeTextarea.css('background-color', '#f1f8fb'); 
    } 
}).mouseleave(function() { 
    textareaCopiedText.addClass('hidden'); 
    pixelCodeTextarea.css('background-color', 'transparent'); 
}); 

Es prüft, ob textareaCopiedText2 die Klasse hidden auf sie hat, so wird es nicht zeigen, wenn es funktioniert.

0

Das Beispiel von @Albzi funktioniert aber vielleicht möchten Sie die "Text in die Zwischenablage kopieren" wieder erscheinen, wenn die Maus das Textfeld nach dem Klick nie verlässt?

So:

var pixelCodeTextarea = $("#tracking_html"), 
textareaCopiedText = $('#pixel_textarea_copy'), 
textareaCopiedText2 = $('#pixel_textarea_copied'), 
textareaWrapper = $('#pixel_textarea_wrapper'), 
onTextarea = false; 

textareaWrapper.mouseenter(function() { 
     onTextarea = true; 
     if(textareaCopiedText2.hasClass('hidden')) { 
     textareaCopiedText.removeClass('hidden'); 
     pixelCodeTextarea.css('background-color', '#f1f8fb'); 
    } 
}).mouseleave(function() { 
    onTextarea = false; 
    if(textareaCopiedText2.hasClass('hidden')) { 
    textareaCopiedText.addClass('hidden'); 
    pixelCodeTextarea.css('background-color', 'transparent'); 
    } 
}); 

pixelCodeTextarea.on('click', function() { 
    textareaCopiedText.addClass('hidden'); 
    pixelCodeTextarea.css('background-color', '#bbcadc'); 
    textareaCopiedText2.removeClass('hidden'); 

    window.setTimeout(function() { 
    pixelCodeTextarea.css('background-color', 'transparent'); 
    textareaCopiedText2.addClass('hidden'); 
    if (onTextarea) { 
     textareaCopiedText.removeClass('hidden'); 
     pixelCodeTextarea.css('background-color', '#f1f8fb'); 
    } 
    }, 1500); 
}); 

Hier ist die Geige: https://jsfiddle.net/ttm8m8uu/

Verwandte Themen