利用jquery实现照片拖动删除排序



30 118 40



特效描述:利用jquery实现 照片拖动 删除排序,利用jquery实现照片拖动删除排序

代码结构

1. 引入CSS

<link rel="stylesheet" href="css/style.css" type="text/css" media="screen"/>

2. 引入JS

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<script src="jquery.transform-0.6.2.min.js"></script>
<script src="jquery.animate-shadow-min.js"></script>

3. HTML代码

		<div>
			<h1 class="title">Interactive Photo Desk with jQuery and CSS3</h1>
			<span class="reference">
			</span>
		</div>
		<div>
			<a id="pd_loading" href="#" class="pd_loading"></a>
		</div>
		<div id="pd_options_bar" class="pd_options_bar">
			<a href="#" class="shuffle">Shuffle</a>
			<a href="#" class="backdesk" style="display:none;">Back to Desk</a>
			<a href="#" class="viewall">View All</a>
		</div>
		<div id="pd_container" class="pd_container">
			<div class="pd_photo">
				<div class="pd_hold">
					<img src="photos/1.jpg" alt=""/>
				</div>
				<span class="delete"></span>
			</div>
			<div class="pd_photo">
				<div class="pd_hold">
					<img src="photos/2.jpg" alt=""/>
				</div>
				<span class="delete"></span>
			</div>
			<div class="pd_photo">
				<div class="pd_hold">
					<img src="photos/3.jpg" alt=""/>
				</div>
				<span class="delete"></span>
			</div>
			<div class="pd_photo">
				<div class="pd_hold">
					<img src="photos/4.jpg" alt=""/>
				</div>
				<span class="delete"></span>
			</div>
			<div class="pd_photo">
				<div class="pd_hold">
					<img src="photos/5.jpg" alt=""/>
				</div>
				<span class="delete"></span>
			</div>
		</div>
		<!-- The JavaScript -->
		<script type="text/javascript">
			$(function() {
				/**
				 * idx:
				 * index of photo that is currently hold
				 * idxLarge:
				 * index of photo that is currently on full mode
				 * mouseup:
				 * flag to use on the mouseup and mousedown events,
				 * to help preventing the browser default selection of elements
				 */
				var idx,idxLarge	= -1;
				var mouseup 		= false;
				/**
				 * for now we hardcode the values of our thumb containers
				 */
				var photoW			= 184;
				var photoH			= 205;
				/**
				 * the photos and options container
				 */
				var $container 		= $('#pd_container');
				var $options		= $('#pd_options_bar');
				var photosSize 		= $container.find('.pd_photo').length;
				/**
				 * navigation current step
				 */
				var navPage			= 0;
				/**
				 * spreads the photos on the table..
				 */
				var ie 				= false;
				if ($.browser.msie) {
					ie = true;
				}
				start();
				function start(){
					$('#pd_loading').show();
					var tableW 			= $container.width();
					var tableH 			= $container.height();
					var horizontalMax	= tableW - photoW;
					var verticalMax		= tableH - photoH;
					$('<img />').attr('src','images/paperball.png');
					/**
					* display all the photos on the desk, with a random rotation,
					 * and also make them draggable.
					 * on mouse down, we want the photo to enlarge in a few pixels,
					 * and to rotate 0 degrees
					 */
					var cntPhotos = 0;
					$container.find('.pd_photo').each(function(i){
						var $photo 	= $(this);
						$('<img />').load(function(){
							++cntPhotos;
							var $image 	= $(this);
						var r		= Math.floor(Math.random()*201)-100;//*41
						var maxzidx = parseInt(findHighestZIndex()) + 1;
						var param	= {
							'top' 		: Math.floor(Math.random()*verticalMax) +'px',       
							'left'		: Math.floor(Math.random()*horizontalMax) +'px',
								'z-index'	: maxzidx
						};
							$photo.css(param);
							if(!ie)
								$photo.transform({'rotate'	: r + 'deg'});
							$photo.show();	
							if(cntPhotos == photosSize){
					bindEvents();
								$('#pd_loading').hide();
							}
						}).attr('src',$photo.find('img').attr('src'));	
					});	
				}
				/**
				 * grab a photo
				 */
				function mouseDown($photo){
					mouseup 	= true;
					idx			= $photo.index() + 1;
					var maxzidx = parseInt(findHighestZIndex()) + 1;
					$photo.css('z-index',maxzidx);
					if(ie)
					var param = {
						'width'		: '+=40px',
						'height'	: '+=40px'
					};
					else
					var param = {
						'width'		: '+=40px',
						'height'	: '+=40px',
						'rotate'	: '0deg',
						'shadow'	: '5px 5px 15px #222'
					};
					$photo.stop(true,true).animate(param,100).find('img').stop(true,true).animate({
						'width'		: '+=40px',
						'height'	: '+=40px'
					},100);
				}
				/**
				 * we do the mouseup on the document to prevent the
				 * case when we release the mouse outside of a photo.
				 * also, we want the photo to get smaller again,
				 * rotate some random degrees, and also move it some pixels
				 */
				$(document).bind('mouseup',function(e){
					if(mouseup){
						mouseup 	= false;
						var $photo 	= $container.find('.pd_photo:nth-child('+idx+')');
						var r		= Math.floor(Math.random()*101)-50;
						var $photoT	= parseFloat($photo.css('top'),10);
						var $photoL	= parseFloat($photo.css('left'),10);
						var newTop	= $photoT + r;
						var newLeft	= $photoL + r;
						if(ie)
						var param = {
							'width'		: '-=40px',
							'height'	: '-=40px',
							'top'		: newTop + 'px', 
							'left'		: newLeft + 'px'
						};
						else
						var param = {
							'width'		: '-=40px',
							'height'	: '-=40px',
							'top'		: newTop + 'px',
							'left'		: newLeft + 'px',
							'rotate'	: r+'deg',
							'shadow'	: '0 0 5px #000'
						};
						$photo.stop(true,true).animate(param,200).find('img').stop(true,true).animate({
							'width'	: '-=40px',
							'height': '-=40px'
						},200);
					}
					e.preventDefault();
				});
				/**
				 * removes the photo element from the DOM,
				 * after showing the paper image..
				 */
				$container.find('.delete').bind('click',function(){
					var $photo 			= $(this).parent();
					var $photoT			= parseFloat($photo.css('top'),10);
					var $photoL			= parseFloat($photo.css('left'),10);
					var $photoZIndex	= $photo.css('z-index');
					var $trash = $('<div />',{
						'className'	: 'pd_paperball',
						'style'		: 'top:' + parseInt($photoT + photoH/2) + 'px;left:' + parseInt($photoL + photoW/2) +'px;width:0px;height:0px;z-index:' + $photoZIndex
					}).appendTo($container);
					$trash.animate({
						'width'	: photoW + 'px',
						'height': photoH + 'px',
						'top'	: $photoT + 'px',
						'left'	: $photoL + 'px'
					},100,function(){
						var $this = $(this);
						setTimeout(function(){
							$this.remove();
						},800);
					});
					$photo.animate({
						'width'	: '0px',
						'height': '0px',
						'top'	: $photoT + photoH/2 + 'px',
						'left'	: $photoL + photoW/2 +'px'
					},200,function(){
						--photosSize;
						$(this).remove();
					});
				});
				function stack(){
					navPage 		= 0;
					var cnt_photos 	= 0;
					var windowsW 		= $(window).width();
					var windowsH 		= $(window).height();
					$container.find('.pd_photo').each(function(i){
						var $photo 	= $(this);
						$photo.css('z-index',parseInt(findHighestZIndex()) + 1000 + i)
						.stop(true)
						.animate({
							'top'	: parseInt((windowsH-100)/2 - photoH/2) + 'px',
							'left'	: parseInt((windowsW-100)/2 - photoW/2) + 'px'
						},800,function(){
							$options.find('.backdesk').show();
							var $photo = $(this);
							++cnt_photos;
							var $nav 	= $('<a class="pd_next_photo" style="display:none;"></a>');
							$nav.bind('click',function(){
								navigate();
								$(this).remove();
							});
							$photo.prepend($nav);
							$photo.draggable('destroy')
							.find('.delete')
							.hide()
							.andSelf()
							.find('.pd_hold')
							.unbind('mousedown')
							.bind('mousedown',function(){return false;});
							$photo.unbind('mouseenter')
							.bind('mouseenter',function(){
								$nav.show();
							})
							.unbind('mouseleave')
							.bind('mouseleave',function(){
								$nav.hide();
							});
							$options.find('.shuffle,.viewall').unbind('click');
							if(cnt_photos == photosSize)
								enlarge(findElementHighestZIndex());
						});
					});
				}
				function enlarge($photo){
					var windowsW 		= $(window).width();
					var windowsH 		= $(window).height();
					if(ie)
					var param = {
						'width'	: '+=200px',
						'height': '+=200px',
						'top'	: parseInt((windowsH-100)/2 - (photoH+200)/2) + 'px', 
						'left'	: parseInt((windowsW-100)/2 - (photoW+200)/2) + 'px'
					};
					else
					var param = {
						'width'	: '+=200px',
						'height': '+=200px',
						'top'	: parseInt((windowsH-100)/2 - (photoH+200)/2) + 'px',
						'left'	: parseInt((windowsW-100)/2 - (photoW+200)/2) + 'px',
						'rotate': '0deg',
						'shadow': '5px 5px 15px #222'
					};
					$photo.animate(param,500,function(){
						idxLarge = $(this).index();
					}).find('img').animate({
						'width'	: '+=200px',
						'height': '+=200px'
					},500);
				}
				/**
				 * back to desk
				 */
				function disperse(){
					var windowsW 		= $(window).width();
					var windowsH 		= $(window).height();
					$container.find('.pd_photo').each(function(i){
						var $photo 		= $(this);
						//if it is the current large photo:
						if($photo.index() == idxLarge){
							if(ie)
							var param = {
								'top'		: parseInt((windowsH-100)/2 - photoH/2) + 'px', 
								'left'		: parseInt((windowsW-100)/2 - photoW/2) + 'px',
								'width'		: '170px',
								'height'	: '170px'
							};
							else
							var param = {
								'top'		: parseInt((windowsH-100)/2 - photoH/2) + 'px', 
								'left'		: parseInt((windowsW-100)/2 - photoW/2) + 'px',
								'width'		: '170px',
								'height'	: '170px',
								'shadow'	: '1px 1px 5px #555'
							};
							$photo.stop(true).animate(param,500, function(){
								shuffle();
								$options.find('.viewall').show();
							}).find('img').animate({
								'width'		: '170px',
								'height'	: '170px'
							},500);
						}
					});
					$container.find('.pd_next_photo').remove();
					bindEvents();
				}
				function bindEvents(){
					$options.find('.shuffle').unbind('click').bind('click',function(e){
						if(photosSize == 0) return;
						shuffle();
						e.preventDefault();
					}).andSelf().find('.viewall').unbind('click').bind('click',function(e){
						var $this = $(this);
						if(photosSize == 0) return;
						stack();
						$this.hide();
						e.preventDefault();
					}).andSelf().find('.backdesk').unbind('click').bind('click',function(e){
						var $this = $(this);
						if(photosSize == 0) return;
						disperse();
						$this.hide();
						e.preventDefault();
					});
					$container.find('.pd_photo').each(function(i){
						var $photo = $(this);
						$photo.draggable({
							containment	: '#pd_container'
						}).find('.delete')
						.show()
					}).find('.pd_hold').unbind('mousedown').bind('mousedown',function(e){
						var $photo 	= $(this).parent();
						mouseDown($photo);
						e.preventDefault();
					});
				}
				function navigate(){
					if(photosSize == 0) return;
					var tableW 			= $container.width();
					var tableH 			= $container.height();
					var horizontalMax	= tableW - photoW;
					var verticalMax		= tableH - photoH;
					var $photo 			= $container.find('.pd_photo:nth-child('+parseInt(idxLarge+1)+')');
					var r				= Math.floor(Math.random()*201)-100;//*41
					if(ie)
					var param = {
						'top' 		: Math.floor(Math.random()*verticalMax) +'px',       
						'left'		: Math.floor(Math.random()*horizontalMax) +'px',
						'width'		: '170px',
						'height'	: '170px'
					};
					else
					var param = {
						'top' 		: Math.floor(Math.random()*verticalMax) +'px',
						'left'		: Math.floor(Math.random()*horizontalMax) +'px',
						'width'		: '170px',
						'height'	: '170px',
						'rotate'	: r+'deg',
						'shadow'	: '1px 1px 5px #555'
					};
					$photo.stop(true).animate(param,500,function(){
						++navPage;
						var $photo = $(this);
						$container.append($photo.css('z-index',1));
						if(navPage < photosSize)
							enlarge(findElementHighestZIndex());
						else{ //last one
							$options.find('.backdesk').hide();
							$options.find('.viewall').show();
							bindEvents();
						}
					}).find('img').animate({
						'width'		: '170px',
						'height'	: '170px'
					},500);
				}
				function shuffle(){
					var tableW 			= $container.width();
					var tableH 			= $container.height();
					var horizontalMax	= tableW - photoW;
					var verticalMax		= tableH - photoH;
					$container.find('.pd_photo').each(function(i){
						var $photo = $(this);
						var r		= Math.floor(Math.random()*301)-100;//*41
						if(ie)
						var param = {
							'top' 		: Math.floor(Math.random()*verticalMax) +'px',       
							'left'		: Math.floor(Math.random()*horizontalMax) +'px'
						};
						else
						var param = {
							'top' 		: Math.floor(Math.random()*verticalMax) +'px',
							'left'		: Math.floor(Math.random()*horizontalMax) +'px',
							'rotate'	: r+'deg'
						};
						$photo.animate(param,800);	
					});
				}
				function findHighestZIndex(){
					var photos = $container.find('.pd_photo');
					var highest = 0;
					photos.each(function(){
						var $photo = $(this);
						var zindex = $photo.css('z-index');
						if (parseInt(zindex) > highest) {
							highest = zindex;
						}
					});
					return highest;
				}
				function findElementHighestZIndex(){
					var photos = $container.find('.pd_photo');
					var highest = 0;
					var $elem;
					photos.each(function(){
						var $photo = $(this);
						var zindex = $photo.css('z-index');
						if (parseInt(zindex) > highest) {
							highest = zindex;
							$elem	= $photo;
						}
					});
					return $elem;
				}
				// Array Remove - By John Resig (MIT Licensed)
				Array.prototype.remove = function(from, to) {
					var rest = this.slice((to || from) + 1 || this.length);
					this.length = from < 0 ? this.length + from : from;
					return this.push.apply(this, rest);
				};
			});
		</script>



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册


热门标签: 图片翻转 图片旋转 图片淡出淡进 图片淡出 图片淡进 图片延迟加载 图片延迟 图片加载 图片拖动 图片拖拽 头像上传 图片上传 图片放大镜 二维码 图片叠加 图片层叠 图片全屏 图片放大缩小 图片缩放 图片大小 图片放大 图片缩小 图片变大 图片变小 h5图片动画 h5图标动画 html5图片动画 html5图标动画 图片广告 带缩略图的幻灯片 地图 中国地图 世界地图 纯图片轮播 图片轮播 拖动 拖拽 拖动插件 拖拽插件 旋转木马 图片旋转木马 文字旋转木马 旋转木马插件 图片收缩展开 图片收缩 图片展开 图片切换 图片选项卡 图标选项卡 图片滑动 图片滑块 图片滚动 图片滚动条 图标导航 图标菜单 自动滚动图片轮播 叠加浮动层 背景切换 大图切换 手风琴 水平手风琴 垂直手风琴 图片手风琴 文字手风琴 手风琴插件 层叠叠加 叠加层叠 层叠 叠加 加载更多 切换按钮 表单 表单美化 表单插件 表单美化插件 图表 图片 图片插件 头像截图 图片拖动 图片拖拽 图片叠加 图片层叠 图片相册 相册图片 添加删除

×
×

注册

官方QQ群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到