|
/**
|
|
* jQuery.Ruler v0.9
|
|
* Add Photoshop-like rulers and mouse position to a container element using jQuery.
|
|
* http://ruler.hilliuse.com
|
|
*
|
|
* Dual licensed under the MIT and GPL licenses.
|
|
* Copyright 2013 Hillius Ettinoffe http://hilliuse.com
|
|
*/
|
|
;(function( $ ){
|
|
|
|
$.fn.ruler = function(options) {
|
|
|
|
var defaults = {
|
|
vRuleSize: 18,
|
|
hRuleSize: 18,
|
|
showCrosshair : true,
|
|
showMousePos: true
|
|
};//defaults
|
|
var settings = $.extend({},defaults,options);
|
|
|
|
var hRule = '<div class="ruler hRule"></div>',
|
|
vRule = '<div class="ruler vRule"></div>',
|
|
corner = '<div class="ruler corner"></div>',
|
|
vMouse = '<div class="vMouse"></div>',
|
|
hMouse = '<div class="hMouse"></div>',
|
|
mousePosBox = '<div class="mousePosBox">x: 50%, y: 50%</div>';
|
|
|
|
if (!Modernizr.touch) {
|
|
// Mouse crosshair
|
|
if (settings.showCrosshair) {
|
|
$('body').append(vMouse, hMouse);
|
|
}
|
|
// Mouse position
|
|
if (settings.showMousePos) {
|
|
$('body').append(mousePosBox);
|
|
}
|
|
// If either, then track mouse position
|
|
if (settings.showCrosshair || settings.showMousePos) {
|
|
$(window).mousemove(function(e) {
|
|
if (settings.showCrosshair) {
|
|
$('.vMouse').css("top",e.pageY-($(document).scrollTop())+1);
|
|
$('.hMouse').css("left",e.pageX+1);
|
|
//-($(window).scrollTop())
|
|
}
|
|
if (settings.showMousePos) {
|
|
$('.mousePosBox').html("x:" + (e.pageX-settings.vRuleSize) + ", y:" + (e.pageY-settings.hRuleSize) ).css({
|
|
top: e.pageY-($(document).scrollTop()) + 16,
|
|
left: e.pageX + 12
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
//resize
|
|
$(window).resize(function(e){
|
|
var $hRule = $('.hRule');
|
|
var $vRule = $('.vRule');
|
|
$hRule.empty();
|
|
$vRule.empty().height(0).outerHeight($vRule.parent().outerHeight());
|
|
|
|
// Horizontal ruler ticks
|
|
var tickLabelPos = settings.vRuleSize;
|
|
var newTickLabel = "";
|
|
while ( tickLabelPos <= $hRule.width() ) {
|
|
if ((( tickLabelPos - settings.vRuleSize ) %50 ) == 0 ) {
|
|
newTickLabel = "<div class='tickLabel'>" + ( tickLabelPos - settings.vRuleSize ) + "</div>";
|
|
$(newTickLabel).css( "left", tickLabelPos+"px" ).appendTo($hRule);
|
|
} else if ((( tickLabelPos - settings.vRuleSize ) %10 ) == 0 ) {
|
|
newTickLabel = "<div class='tickMajor'></div>";
|
|
$(newTickLabel).css("left",tickLabelPos+"px").appendTo($hRule);
|
|
} else if ((( tickLabelPos - settings.vRuleSize ) %5 ) == 0 ) {
|
|
newTickLabel = "<div class='tickMinor'></div>";
|
|
$(newTickLabel).css( "left", tickLabelPos+"px" ).appendTo($hRule);
|
|
}
|
|
tickLabelPos = (tickLabelPos + 5);
|
|
}//hz ticks
|
|
|
|
// Vertical ruler ticks
|
|
tickLabelPos = settings.hRuleSize;
|
|
newTickLabel = "";
|
|
while (tickLabelPos <= $vRule.height()) {
|
|
if ((( tickLabelPos - settings.hRuleSize ) %50 ) == 0) {
|
|
newTickLabel = "<div class='tickLabel'><span>" + ( tickLabelPos - settings.hRuleSize ) + "</span></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
} else if (((tickLabelPos - settings.hRuleSize)%10) == 0) {
|
|
newTickLabel = "<div class='tickMajor'></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
} else if (((tickLabelPos - settings.hRuleSize)%5) == 0) {
|
|
newTickLabel = "<div class='tickMinor'></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
}
|
|
tickLabelPos = ( tickLabelPos + 5 );
|
|
}//vert ticks
|
|
});//resize
|
|
|
|
return this.each(function() {
|
|
var $this = $(this);
|
|
|
|
// Attach rulers
|
|
|
|
// Should not need 1 min padding-top of 1px but it does
|
|
// will figure it out some other time
|
|
$this.css("padding-top", settings.hRuleSize + 1 + "px");
|
|
if (settings.hRuleSize > 0) {
|
|
$(hRule).height(settings.hRuleSize).prependTo($this);
|
|
}
|
|
|
|
if (settings.vRuleSize > 0) {
|
|
var oldWidth = $this.outerWidth();
|
|
$this.css("padding-left", settings.vRuleSize + 1 + "px").outerWidth(oldWidth);
|
|
$(vRule).width(settings.vRuleSize).height($this.outerHeight()).prependTo($this);
|
|
}
|
|
|
|
if ( (settings.vRuleSize > 0) && (settings.hRuleSize > 0) ) {
|
|
$(corner).css({
|
|
width: settings.vRuleSize,
|
|
height: settings.hRuleSize
|
|
}).prependTo($this);
|
|
}
|
|
|
|
|
|
var $hRule = $this.children('.hRule');
|
|
var $vRule = $this.children('.vRule');
|
|
|
|
// Horizontal ruler ticks
|
|
var tickLabelPos = settings.vRuleSize;
|
|
var newTickLabel = "";
|
|
while ( tickLabelPos <= $hRule.width() ) {
|
|
if ((( tickLabelPos - settings.vRuleSize ) %50 ) == 0 ) {
|
|
newTickLabel = "<div class='tickLabel'>" + ( tickLabelPos - settings.vRuleSize ) + "</div>";
|
|
$(newTickLabel).css( "left", tickLabelPos+"px" ).appendTo($hRule);
|
|
} else if ((( tickLabelPos - settings.vRuleSize ) %10 ) == 0 ) {
|
|
newTickLabel = "<div class='tickMajor'></div>";
|
|
$(newTickLabel).css("left",tickLabelPos+"px").appendTo($hRule);
|
|
} else if ((( tickLabelPos - settings.vRuleSize ) %5 ) == 0 ) {
|
|
newTickLabel = "<div class='tickMinor'></div>";
|
|
$(newTickLabel).css( "left", tickLabelPos+"px" ).appendTo($hRule);
|
|
}
|
|
tickLabelPos = (tickLabelPos + 5);
|
|
}//hz ticks
|
|
|
|
// Vertical ruler ticks
|
|
tickLabelPos = settings.hRuleSize;
|
|
newTickLabel = "";
|
|
while (tickLabelPos <= $vRule.height()) {
|
|
if ((( tickLabelPos - settings.hRuleSize ) %50 ) == 0) {
|
|
newTickLabel = "<div class='tickLabel'><span>" + ( tickLabelPos - settings.hRuleSize ) + "</span></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
} else if (((tickLabelPos - settings.hRuleSize)%10) == 0) {
|
|
newTickLabel = "<div class='tickMajor'></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
} else if (((tickLabelPos - settings.hRuleSize)%5) == 0) {
|
|
newTickLabel = "<div class='tickMinor'></div>";
|
|
$(newTickLabel).css( "top", tickLabelPos+"px" ).appendTo($vRule);
|
|
}
|
|
tickLabelPos = ( tickLabelPos + 5 );
|
|
}//vert ticks
|
|
|
|
});//each
|
|
|
|
};//ruler
|
|
})( jQuery );
|