PageRenderTime 44ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Honolo_Code_FF/Honolo_Code/Honolo.UI/obj/Debug/Package/PackageTmp/Scripts/miniZoomPan.js

http://project-manh-lan.googlecode.com/
JavaScript | 260 lines | 105 code | 14 blank | 141 comment | 41 complexity | b490be598e028d1594a9dc4cc42d8b52 MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, LGPL-2.1
  1. /*!
  2. * jQuery miniZoomPan 1.0
  3. * 2009 Gian Carlo Mingati
  4. * Version: 1.0 (18-JUNE-2009)
  5. * Dual licensed under the MIT and GPL licenses:
  6. * http://www.opensource.org/licenses/mit-license.php
  7. * http://www.gnu.org/licenses/gpl.html
  8. *
  9. * Requires:
  10. * jQuery v1.3.2 or later
  11. *
  12. *
  13. *
  14. (function($) {
  15. jQuery.fn.miniZoomPan = function(settings) {
  16. settings = jQuery.extend({
  17. sW: 10, // small image width
  18. sH: 10, // small image height
  19. lW: 20, // large image width
  20. lH: 20, // large image height
  21. frameColor: "#cecece",
  22. frameWidth: 1,
  23. loaderContent: "loading..." // plain text or an image tag eg.: "<img src='yoursite.com/spinner.gif' />"
  24. }, settings);
  25. return this.each(function(){
  26. var mousedown = false;
  27. var div = jQuery(this);
  28. div.css({width: settings.sW, height: settings.sH, border: settings.frameWidth+"px solid "+settings.frameColor}).addClass("minizoompan");
  29. var ig = div.children();
  30. ig.css({position: "relative"});
  31. jQuery(window).bind("load", function() {
  32. ig.width(settings.sW);
  33. ig.height(settings.sH);
  34. });
  35. div.css({overflow: "hidden"});
  36. jQuery("<span class='loader'>"+settings.loaderContent+"<\/span>").insertBefore(ig);
  37. div.mousedown(function(e){
  38. mousedown = true;
  39. });
  40. div.mouseup(function(e){
  41. mousedown = false;
  42. });
  43. div.mousemove(function(e){
  44. if(mousedown){
  45. var divWidth = div.width();
  46. var divHeight = div.height();
  47. var igW = ig.width();
  48. var igH = ig.height();
  49. var dOs = div.offset();
  50. var leftPan = (e.pageX - dOs.left) * (divWidth - igW) / (divWidth+settings.frameWidth*2);
  51. var topPan = (e.pageY - dOs.top) * (divHeight - igH) / (divHeight+settings.frameWidth*2);
  52. ig.css({left: leftPan, top: topPan});
  53. }
  54. });
  55. /*
  56. div.toggle(
  57. function () {
  58. ig.css({ width: settings.lW, height: settings.lH});
  59. var hiSrc = ig.attr("src").replace(/s.jpg/, 'l.jpg');
  60. swapImage(ig, hiSrc);
  61. div.children("span.loader").fadeIn(250);
  62. //Added by Kenan Balamir (Abdullah CEYLAN)
  63. // 16.04.2010 17:16
  64. $('#zoom_in').css({display: "none"});
  65. $('#zoom_out').css({display: ""});
  66. }
  67. ,
  68. function () {
  69. ig.css({left: "0", top: "0", width: settings.sW, height: settings.sH});
  70. var loSrc = ig.attr("src").replace(/l.jpg/, 's.jpg');
  71. swapImage(ig, loSrc);
  72. div.children("span.loader").fadeOut(250);
  73. //Added by Kenan Balamir (Abdullah CEYLAN)
  74. // 16.04.2010 17:16
  75. //$('#zoom_out').css({display: "none"});
  76. //$('#zoom_in').css({display: ""});
  77. }
  78. );
  79. //Added by Kenan Balamir (Abdullah CEYLAN)
  80. // 16.04.2010 17:16
  81. *
  82. $('#zoom_in').click(
  83. function () {
  84. ig.css({ width: settings.lW, height: settings.lH});
  85. var hiSrc = ig.attr("src").replace(/s.jpg/, 'l.jpg');
  86. swapImage(ig, hiSrc);
  87. div.children("span.loader").fadeIn(250);
  88. $('#zoom_in').css({display: "none"});
  89. $('#zoom_out').css({display: ""});
  90. }),$('#zoom_out').click(
  91. function () {
  92. ig.css({left: "0", top: "0", width: settings.sW, height: settings.sH});
  93. var loSrc = ig.attr("src").replace(/l.jpg/, 's.jpg');
  94. swapImage(ig, loSrc);
  95. div.children("span.loader").fadeOut(250);
  96. $('#zoom_out').css({display: "none"});
  97. $('#zoom_in').css({display: ""});
  98. }
  99. );
  100. /*Swaps the image from small to big or vice versa...*
  101. function swapImage(param, uri){
  102. param.load(function () {
  103. div.children("span.loader").fadeOut(250);
  104. }).error(function (){
  105. alert("Image does not exist or its SRC is not correct.");
  106. }).attr('src', uri);
  107. }
  108. });
  109. };
  110. })(jQuery);
  111. */
  112. /* Simple Image Panner and Zoomer (March 11th, 10)
  113. * This notice must stay intact for usage
  114. * Author: Dynamic Drive at http://www.dynamicdrive.com/
  115. * Visit http://www.dynamicdrive.com/ for full source code
  116. */
  117. // v1.1 (March 25th, 10): Updated with ability to zoom in/out of image
  118. //jQuery.noConflict()
  119. var ddimagepanner = {
  120. magnifyicons: ['/Content/images/icn_mapzoom-in.gif', '/Content/images/icn_mapzoom-out.gif', 24, 24], //set path to zoom in/out images, plus their dimensions
  121. maxzoom: 4, //set maximum zoom level (from 1x)
  122. init: function ($, $img, options) {
  123. var s = options
  124. s.imagesize = [$img.width(), $img.height()]
  125. s.oimagesize = [$img.width(), $img.height()] //always remember image's original size
  126. s.pos = (s.pos == "center") ? [-(s.imagesize[0] / 2 - s.wrappersize[0] / 2), -(s.imagesize[1] / 2 - s.wrappersize[1] / 2)] : [0, 0] //initial coords of image
  127. s.pos = [Math.floor(s.pos[0]), Math.floor(s.pos[1])]
  128. $img.css({ position: 'relative', left: s.pos[0], top: s.pos[1] })
  129. if (s.canzoom == "yes") { //enable image zooming?
  130. s.dragcheck = { h: (s.wrappersize[0] > s.imagesize[0]) ? false : true, v: (s.wrappersize[1] > s.imagesize[1]) ? false : true} //check if image should be draggable horizon and vertically
  131. s.$statusdiv = $('<div style="position:absolute;color:white;background:#353535;padding:2px 10px;font-size:12px;visibility:hidden">1x Zoom</div>').appendTo(s.$pancontainer) //create DIV to show current magnify level
  132. s.$statusdiv.css({ left: 0, top: s.wrappersize[1] - s.$statusdiv.outerHeight(), display: 'none', visibility: 'visible' })
  133. this.zoomfunct($, $img, s)
  134. }
  135. this.dragimage($, $img, s)
  136. },
  137. dragimage: function ($, $img, s) {
  138. $img.mousedown(function (e) {
  139. s.pos = [parseInt($img.css('left')), parseInt($img.css('top'))]
  140. var xypos = [e.clientX, e.clientY]
  141. $img.bind('mousemove.dragstart', function (e) {
  142. var pos = s.pos, imagesize = s.imagesize, wrappersize = s.wrappersize
  143. var dx = e.clientX - xypos[0] //distance to move horizontally
  144. var dy = e.clientY - xypos[1] //vertically
  145. s.dragcheck = { h: (wrappersize[0] > imagesize[0]) ? false : true, v: (wrappersize[1] > imagesize[1]) ? false : true }
  146. if (s.dragcheck.h == true) //allow dragging horizontally?
  147. var newx = (dx > 0) ? Math.min(0, pos[0] + dx) : Math.max(-imagesize[0] + wrappersize[0], pos[0] + dx) //Set horizonal bonds. dx>0 indicates drag right versus left
  148. if (s.dragcheck.v == true) //allow dragging vertically?
  149. var newy = (dy > 0) ? Math.min(0, s.pos[1] + dy) : Math.max(-imagesize[1] + wrappersize[1], pos[1] + dy) //Set vertical bonds. dy>0 indicates drag downwards versus up
  150. $img.css({ left: (typeof newx != "undefined") ? newx : pos[0], top: (typeof newy != "undefined") ? newy : pos[1] })
  151. return false //cancel default drag action
  152. })
  153. return false //cancel default drag action
  154. })
  155. $(document).bind('mouseup', function (e) {
  156. $img.unbind('mousemove.dragstart')
  157. })
  158. },
  159. zoomfunct: function ($, $img, s) {
  160. var magnifyicons = this.magnifyicons
  161. var $zoomimages = $('<img src="' + magnifyicons[0] + '" /><img src="' + magnifyicons[1] + '" />')
  162. .css({ width: magnifyicons[2], height: magnifyicons[3], cursor: 'pointer', zIndex: 1000, position: 'absolute',
  163. top: 2, left: magnifyicons[2] + 5, opacity: 0.7
  164. })
  165. .attr("title", "Zoom Out")
  166. .appendTo(s.$pancontainer)
  167. $zoomimages.eq(0).css({ left: parseInt($zoomimages.eq(0).css('left')) - magnifyicons[2] - 3, opacity: 1 }) //position "zoom in" image
  168. .attr("title", "Zoom In")
  169. $zoomimages.click(function (e) { //assign click behavior to zoom images
  170. var $zimg = $(this) //reference image clicked on
  171. var curzoom = s.curzoom //get current zoom level
  172. var zoomtype = ($zimg.attr("title").indexOf("In") != -1) ? "in" : "out"
  173. if (zoomtype == "in" && s.curzoom == ddimagepanner.maxzoom || zoomtype == "out" && s.curzoom == 1) //exit if user at either ends of magnify levels
  174. return
  175. var basepos = [s.pos[0] / curzoom, s.pos[1] / curzoom]
  176. var newzoom = (zoomtype == "out") ? Math.max(1, curzoom - 1) : Math.min(ddimagepanner.maxzoom, curzoom + 1) //get new zoom level
  177. $zoomimages.css("opacity", 1)
  178. if (newzoom == 1) //if zoom level is 1x, dim "zoom out" image
  179. $zoomimages.eq(1).css("opacity", 0.7)
  180. else if (newzoom == ddimagepanner.maxzoom) //if zoom level is max level, dim "zoom in" image
  181. $zoomimages.eq(0).css("opacity", 0.7)
  182. clearTimeout(s.statustimer)
  183. s.$statusdiv.html(newzoom + "x Zoom").show() //show current zoom status/level
  184. var nd = [s.oimagesize[0] * newzoom, s.oimagesize[1] * newzoom]
  185. var newpos = [basepos[0] * newzoom, basepos[1] * newzoom]
  186. newpos = [(zoomtype == "in" && s.wrappersize[0] > s.imagesize[0] || zoomtype == "out" && s.wrappersize[0] > nd[0]) ? s.wrappersize[0] / 2 - nd[0] / 2 : Math.max(-nd[0] + s.wrappersize[0], newpos[0]),
  187. (zoomtype == "in" && s.wrappersize[1] > s.imagesize[1] || zoomtype == "out" && s.wrappersize[1] > nd[1]) ? s.wrappersize[1] / 2 - nd[1] / 2 : Math.max(-nd[1] + s.wrappersize[1], newpos[1])]
  188. $img.animate({ width: nd[0], height: nd[1], left: newpos[0], top: newpos[1] }, function () {
  189. s.statustimer = setTimeout(function () { s.$statusdiv.hide() }, 500)
  190. })
  191. s.imagesize = nd
  192. s.curzoom = newzoom
  193. s.pos = [newpos[0], newpos[1]]
  194. })
  195. }
  196. }
  197. jQuery.fn.imgmover = function (options) {
  198. var $ = jQuery
  199. return this.each(function () { //return jQuery obj
  200. if (this.tagName != "IMG")
  201. return true //skip to next matched element
  202. var $imgref = $(this)
  203. if (parseInt(this.style.width) > 0 && parseInt(this.style.height) > 0) //if image has explicit CSS width/height defined
  204. ddimagepanner.init($, $imgref, options)
  205. else if (this.complete) { //account for IE not firing image.onload
  206. ddimagepanner.init($, $imgref, options)
  207. }
  208. else {
  209. $imgref.bind('load', function () {
  210. ddimagepanner.init($, $imgref, options)
  211. })
  212. }
  213. })
  214. }
  215. jQuery(document).ready(function ($) { //By default look for DIVs with class="pancontainer"
  216. var $pancontainer = $('div.pancontainer');
  217. $pancontainer.each(function () {
  218. var $this = $(this).css({ position: 'relative', overflow: 'hidden', cursor: 'move' })
  219. //var $img = (".imgZoom");
  220. var $img = $this.find('img:eq(0)') //image to pan
  221. var options = { $pancontainer: $this, pos: $this.attr('data-orient'), curzoom: 1, canzoom: $this.attr('data-canzoom'), wrappersize: [$this.width(), $this.height()] }
  222. $img.imgmover(options)
  223. })
  224. })