• JQuery 图片放大+获取鼠标


    $(function(){
    	
    	var view = $( "#view" );
    	var image = $( "#social-image-id" );
    	var size = HHJsLib.getImageSize("http://localhost:8080/xyrj-socail/public/resource/images/1359876033390RSMAF92WIU.jpg");
    
    	// Create the ZOOM element - this will be added with
    	// Javascript since it's more of an "effect".
    	var zoom = $( "<a id='zoom'><span><br /></span></a>" );
    
    	// Before we start messing with the scripts, let's
    	// update the display to allow for the absolute
    	// positioning of the image and zoomer.
    
    		// Set an explicit height / width on the view based
    	// on the initial size of the image.
    		view.width( image.width() );
    		view.height( image.height() );
    
    		// Now that the view has an explicit width and height,
    	// we can change the displays for positioning.
    	image.css( "position", "absolute" );
    
    		// Set an exlicit height on the image (to make sure
    	// that some of the later calcualtions don't get
    	// messed up - I saw some irradic caculated-height
    	// behavior).
    		image.height( image.height() );
    
    		// Before we add the zoom square, we need it to match
    	// the aspect ratio of the image.
    		zoom.width( Math.floor( image.width() / 2 ) );
    		zoom.height( Math.floor( image.height() / 2 ) );
    
    		// Now, add the zoom square to the view.
    		view.append( zoom );
    
    
    		// ---------------------------------------------- //
    	// ---------------------------------------------- //
    
    
    		// Now that we have our UI set up physically, we need
    	// to bind the event handlers.
    
    		// We want to show and hide the zoom only when the
    	// user hovers over the view.
    	view.hover(
    		function( event ){
    			// Show the soom.
    			zoom.show();
    		},
    		function( event ){
    			// Hide the zoom.
    				zoom.hide();
    			}
    		);
    
    
    		// As the user mouses over the view, we can get the
    	// mouse coordinates in terms of the page; we need
    	// to be able to translate those into VIEW-based
    	// X and Y cooridates. As such, let's get the offset
    	// of the view as our base 0x0 coordinate.
    	//
    	// NOTE: We are doing this here so that we do it once,
    	// rather than every time the mouse moves.
    		viewOffset = view.offset();
    
    		// Get the jQuery-ed version of the window as we will
    	// need to access it's scroll offsets every time the
    	// mouse moves over the div.
    	//
    	// NOTE: This will change the change the refernce to
    	// "window" for all of the code in this closure.
    		var window = $( window );
    
    
    		// As the user moves across the view, we want to move
    	// the zoom square with them.
    	view.mousemove(
    		function( event ){
    			// Get the window scroll top; the mouse
    			// position is relative to the window, NOT
    			// the document.
    			var windowScrollTop = window.scrollTop();
    			var windowScrollLeft = window.scrollLeft();
    			
    			// Translate the mouse X / Y into view-local
    			// coordinates that can be used to position
    			// the zoom box.
    				setZoomPosition(
    					Math.floor(
    						event.clientX - viewOffset.left + windowScrollLeft
    					),
    					Math.floor(
    						event.clientY - viewOffset.top + windowScrollTop
    					)
    				);
    			}
    		);
    
    
    		// I position the zoom box within the view based on
    	// the given view-local mouse coordinates.
    	var setZoomPosition = function( mouseLeft, mouseTop ){
    		// Ideally, we want to keep the zoom box centered
    		// on the mouse. As such, we want the given mouse
    		// left and mouse top coordiantes to be in the
    		// middle of the zoom box.
    			var zoomLeft = (mouseLeft - (zoom.width() / 2));
    			var zoomTop = (mouseTop - (zoom.height() / 2))
    
    			// As we move the zoom box around, however, we
    		// never want it to go out of bounds of the view.
    
    			// Protect the top-left bounds.
    			zoomLeft = Math.max( zoomLeft, 0 );
    			zoomTop = Math.max( zoomTop, 0 );
    
    			// Protect the bottom-right bounds. Because the
    		// bottom and right need to take the dimensions
    		// of the zoom box into account, be sure to use
    		// the outer width to include the border.
    			zoomLeft = Math.min(
    				zoomLeft,
    				(view.width() - zoom.outerWidth())
    				);
    			zoomTop = Math.min(
    				zoomTop,
    				(view.height() - zoom.outerHeight())
    				);
    
    			// Position the zoom box in the bounds of the
    		// image view box.
    		zoom.css({
    			left: (zoomLeft + "px"),
    			top: (zoomTop + "px")
    			});
    		};
    
    
    		// Now that we have the mouse movements being tracked
    	// properly, we need to track the click on the zoom to
    	// zoom in the image on demand. To do that, however,
    	// we need to start storing some information with the
    	// image so we can manipulate it as needed.
    		image.data({
    			zoomFactor: (view.width() / zoom.width()),
    			zoom: 1,
    			top: 0,
    			left: 0,
    			 image.width(),
    			height: image.height(),
    			originalWidth: image.width(),
    			originalHeight: image.height()
    		});
    
    
    		// Now, let's attach the click event handler to the
    	// zoom box.
    	zoom.click(
    		function( event ){
    			// First, prevent the default since this is
    			// not a navigational link.
    				event.preventDefault();
    
    				// Let's pass the position of the zoom box
    			// off to the function that is responsible
    			// for zooming the image.
    			zoomImage(
    				zoom.position().left,
    				zoom.position().top
    			);
    			
    			var top = $("#social-image-id" ).offset().top;
    			var left = $("#social-image-id").offset().left;
    			var pointX = left  + ($( "#social-image-id" ).width()/2);
    			var pointY = top  + ($( "#social-image-id" ).height()/2);
    			var width = event.clientX -  pointX;
    			var height = pointY - event.clientY;
    			var reaX = size.width;
    			width = width * (reaX/$( "#social-image-id" ).width());
    			height = height * (reaX/$( "#social-image-id" ).width());
    			$("#position_y_id").val(parseInt(height));
    			$("#position_x_id").val(parseInt(width));
    		}
    	);
    
    
    		// I take the zoom box coordinates and translate them
    	// into an actual image zoom based on the existing
    	// zoom and offset of the image.
    	//
    	// NOTE: We don't care about the dimensions of the
    	// zoom box itself as those should have already been
    	// properly translated into the zoom *factor*.
    	var zoomImage = function( zoomLeft, zoomTop ){
    		// Get a reference to the image data object so we
    		// don't need to keep retreiving it.
    			var imageData = image.data();
    
    			// Check to see if we have reached the max zoom
    		// or if the image is currently animating.
    		// If so, just return out.
    		if (
    			(imageData.zoom == 5) ||
    			(image.is( ":animated" ))
    				){
    
    				// Zooming in beyond this is pointless (and
    			// can cause the browser to mis-render the
    			// image).
    				return;
    
    			}
    
    			// Scale the image up based on the zoom factor.
    			imageData.width =
    				(image.width() * imageData.zoomFactor);
    
    			imageData.height =
    				(image.height() * imageData.zoomFactor);
    
    			// Change the offset set data to re-position the
    		// 0,0 coordinate back up in the top left.
    			imageData.left =
    				((imageData.left - zoomLeft) * imageData.zoomFactor);
    
    			imageData.top =
    				((imageData.top - zoomTop) * imageData.zoomFactor);
    
    			// Increase the zoom.
    			imageData.zoom++;
    
    			// Animate the zoom.
    			image.animate(
    				{
    					 imageData.width,
    					height: imageData.height,
    					left: imageData.left,
    					top: imageData.top
    				},
    				500
    			);
    
    		};
    
    
    		// I reset the image zoom.
    	var resetZoom = function(){
    		// Get a reference to the image data object so we
    		// don't need to keep retreiving it.
    			var imageData = image.data();
    
    			// Reset the image data.
    			imageData.zoom = 1;
    			imageData.top = 0;
    			imageData.left = 0;
    			imageData.width = imageData.originalWidth;
    			imageData.height = imageData.originalHeight;
    
    			// Animate the zoom.
    			image.animate(
    				{
    					 imageData.width,
    					height: imageData.height,
    					left: imageData.left,
    					top: imageData.top
    				},
    				300
    			);
    		};
    
    
    		// As a final step, to make sure that the image can
    	// be zoomed out, bind the mousedown to the document.
    	$( document ).mousedown(
    		function( event ){
    			// Check to see if the view is in the event
    			// bubble chain for the mouse down. If it is,
    			// then this click was in the view or its
    			// child elements.
    			var closestView = $( event.target ).closest( "#view" );
    
    				// Check to see if this mouse down was in the
    			// image view.
    				if (!closestView.size()){
    
    					// The view was not found in the chain.
    				// This was clicked outside of the view.
    				// Reset the image zoom.
    					resetZoom();
    
    				}
    			}
    		);
    	
    });		
    


  • 相关阅读:
    Design + Code (iOS)
    Objective-C Programming (2nd Edition)
    iOS Programming The Big Nerd Ranch Guide (4th Edition)
    反射
    面向对象
    人狗大战
    数据结构初识(三级菜单)
    面向对象(组合)
    练习
    re模块
  • 原文地址:https://www.cnblogs.com/yangzhi/p/3576564.html
Copyright © 2020-2023  润新知