Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <title>JS Bin</title>
</head>
<body>
  <h1 data-over="You have hovered|Over this">Here is a title</h1>
  <p data-over="Text|Text|Text">Here is some text in a paragraph</p>
  <button data-over="And on a|button!">Here is a button</button>
  <p id="test">TEST</p>
</body>
</html>
 
console.clear();
$(document).ready(function () {
  
  // Search for text if it's simple in the HTML
  var $dataElements = $("[data-over]");
  $dataElements.each(function (index, el) {
    var $el = $(el);
    var text = $el.attr("data-over");
    if (text) {
      // Split by "|"
      text = text.split("|");
      createDataOver($el, text);
    }
  });
  
  
  // Or provide it yourself.
  var $testData = $(document.createElement("span"));
  $testData.text("Click me.").click(function () {
    alert("Clicked");
  })
  createDataOver($("#test"), $testData);
  
});
function createDataOver($el, data) {
  var $holder = $(document.createElement("div"));
  $holder.addClass("over hidden");
  
  // Check if we provided JQuery or a string array
  if (data instanceof jQuery) {
    // Manually make it relatively positioned
    $el.css("position", "relative");
    data.addClass("over-line");
    $holder.append(data);
  }
  else {
    data.forEach(function (line) {
      var $line = $(document.createElement("span"));
      $line.text(line);
      $line.addClass("over-line");
      $holder.append($line);
    });
  }
  // append with the hidden class to start
  $el.append($holder);
  
  // Create a closure with a timeout variable
  // So it doesn't disappear immediately if
  // we don't want it to!
  (function closure() {
    var timeoutCancel = -1;
    $el.mouseenter(function () {
      if (timeoutCancel !== -1) {
        clearTimeout(timeoutCancel);
        timeoutCancel = -1;
      }
      $holder.removeClass("hidden");
    });
    $el.mouseleave(function () {
      timeoutCancel = setTimeout(function () {
        if (timeoutCancel !== -1)
        $holder.addClass("hidden");
      }, 500);
    });
  }());
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers