taggd
Add notes to your images, responsively.
What is taggd?
Despite images say more than a thousands words, sometimes it’s just not enough. Taggd is a jQuery plugin that adds tags to your image.
1. Installation
Download the archive or browse the repository.
Then include it after your jQuery file.
<script src="js/jquery.js"></script>
<script src="js/jquery.taggd.js"></script>
				Optionally you can use include (and edit) the css file as well.
<link href="css/taggd.css" />
			2. Configuration
var options = {
  // Aligning the text popups
  align: {
    x: 'center', // left, center or right
    y: 'center'  // top,  center or bottom
  },
  // The (relative) offset of the popups in pixels
  offset: {
    left: 0, // horizontal offset
    top: 12  // vertical offset
  },
  // event handlers of the tags
  handlers: {
    // Any vanilla JavaScript event is a valid key
    click: function(e) {
      alert('You clicked a button');
      this; // the DOM Node
      e;    // the Event
    },
    // For convenience, you can use strings to
    // show, hide and toggle the popups
    mouseenter: 'show',
    mouseleave: 'hide'
  }
};
// The magic comes together here
$('.taggd').taggd( options, data );
			3. What is “data” and how do I get it?
Data are the tags. Taggd accepts different formats, so pay close attention!
var data = [
  // x and y values can be decimals (0-1)
  {
    x: 0.512,
    y: 0.33,
    // (Optional) Set the text of the popup.
    // If omitted, no popup window will appear.
    text: 'Huey',
    // (Optional) Set the element’s attributes.
    attributes: {
    	id:    'my-id',
    	class: 'my-class'
    }
  },
  // x and y values can be in pixels too
  // Don’t you worry, they will scale perfectly
  {
    x: 1052,
    y: 356,
    text: 'Duwey'
  }
];
				As noted in the comments, whatever unit you use, they will scale. The coordinates are always right.
Not sure how to get them? I’ve made a generator to get coordinates.
4. The API
But other than putting in data, you can do more with Taggd!
Managing data
// Replace existing data with new data
taggd.setData( [ ... ] );
// Add new items
taggd.addData( { ... } );            // one item or
taggd.addData( [{ ... }, { ... }] ); // multiple items
// Get rid of all the tags
taggd.clear();
// Undo everthing Taggd did
taggd.dispose();
				Show/hide/toggle tags
// Show/hide/toggle all items
taggd.show();
taggd.hide();
taggd.toggle();
				These three methods all accept the following arguments.
// A specific index
taggd.show( 1 );
// A CSS selector
taggd.show( '#el-one, :nth-child(1)' );
// A jQuery element
taggd.show( $('#el-two') );
// An array containing any of the formats above
taggd.show( ['#el-one', 1] );
// A function that returns true or false
taggd.show(function(i, e) {
  // Show if tag contains a search query
  return data[i].text.indexOf(search_query);
});
				These methods can be chained.
taggd.hide().show( 1 );