js实现图片放大缩小功能后进行复杂排序的方法


Posted in Javascript onNovember 08, 2012

这是一个基于jquery的图片效果,它的作用是:当图片点击变大(变小)时,其它图片按照一定的规则进行排序运动。

首先来看下最终的效果图:
js实现图片放大缩小功能后进行复杂排序的方法

有人可能看到这个会觉得,这有什么难的,这么简单的事,楼主是不是太小提大作了?当你真正去尝试时,你才知道到底有什么难点。 

首先,我们来讲下需求:
1.图片分为大小和小图,大图占四个小图的位置,
2.点击图片放大缩小, 重新排列顺序,
3. 当点击偶数列(2,4)时,它前面的那项将向提出来向后面排列
4.第一个项不能动,点第二个是将占第三四的位置,从后面取第一个小的放置在第二的位置上。
需求就是这样的了,现在难度是否有加大呢,我的思路就是按照这个需求一步步去实现的。代码如下:

var elemArr = $("#old").find("li").get(); 
var arrCol=[0,0,0,0]; 
var defaultSize = 211; 
function setPosition(elemArr,content,oldContent){ 
//alert(elemArr.length) 
if (elemArr.length==0){ 
$(oldContent).remove(); 
animate(content.find("li")); 
var max = Math.max(arrCol[0],arrCol[1],arrCol[2],arrCol[3]) 
$(content).parent().height(max); 
$(content).height(max); 
return; 
} 
var item= $(elemArr.shift()); 
if (item.hasClass("big")){ 
//大 
var min =computeMin(content); 
var x = min.x; 
var y =min.y; 
if (x==defaultSize){ 
var tmp = $("li[x='0'][y='"+y+"']",content); 
if (tmp.hasClass("static")){ 
//第一个 
/* 
arrCol[1]=0; 
x=2*defaultSize; 
if ($("li[x='"+x+"'][y='"+y+"']",content).size()>0){ 
y=parseInt($("li[x='"+x+"'][y='"+y+"']",content).attr("y"))+2*defaultSize; 
} 
arrCol[1]=0; 
*/ 
elemArr=insertSmallArr(elemArr,item); 
setPosition(elemArr,content,oldContent); 
return; 
}else{ 
elemArr=$("li[x='0'][y='"+y+"']",content).get().concat(elemArr); 
//$("li[x='0'][y='"+y+"']",content).remove(); 
x-=defaultSize; 
arrCol[0]-=defaultSize; 
} 
} 
if (x==defaultSize*3){ 
elemArr=$("li[x='"+defaultSize*2+"'][y='"+y+"']",content).get().concat(elemArr); 
//$("li[x='200'][y='"+y+"']",content).remove(); 
x-=defaultSize; 
arrCol[2]-=defaultSize; 
} 
item.attr({"top":y,"left":x}).attr({"x":x,"y":y}); 
if (x==0){ 
arrCol[0]+=defaultSize*2; 
arrCol[1]+=defaultSize*2; 
} 
if (x ==defaultSize*2){ 
arrCol[2]+=defaultSize*2; 
arrCol[3]+=defaultSize*2; 
} 
}else{ 
//小 
var min =computeMin(content); 
var x = min.x; 
var y =min.y; 
item.attr({"top":y,"left":x}).attr({"x":x,"y":y}); if (x==0){ 
arrCol[0]+=defaultSize; 
} 
if (x ==defaultSize){ 
arrCol[1]+=defaultSize; 
} 
if (x ==defaultSize*2){ 
arrCol[2]+=defaultSize; 
} 
if (x ==defaultSize*3){ 
arrCol[3]+=defaultSize; 
} 
} 
$(content).append(item) 
setPosition(elemArr,content,oldContent); 
} 
setPosition(elemArr,$("#news"),$("#old")); 
function insertSmallArr(arr,item){ 
arr = item.get().concat(arr); 
var tmpArr =[]; 
var first =null; 
for (var i=arr.length-1;i>=0 ;i-- ){ 
if (!$(arr[i]).hasClass("big")){ 
first=arr[i]; 
break; 
} 
} 
if (first){ 
tmpArr.push(first); 
} 
for (var i=0,l=arr.length;i<l ;i++ ){ 
if (first !== arr[i]){ 
tmpArr.push(arr[i]); 
} 
} 
return tmpArr; 
} 
function computeMin(content){ 
var arr = $(content).find("li"); 
var miny = Math.min(arrCol[0],arrCol[1],arrCol[2],arrCol[3]) 
var minx= 0; 
if (miny==arrCol[3]){ 
minx=defaultSize*3; 
} 
if (miny==arrCol[2]){ 
minx=defaultSize*2; 
} 
if (miny==arrCol[1]){ 
minx=defaultSize; 
} 
if (miny==arrCol[0]){ 
minx=0; 
} 
return {x:minx,y:miny}; 
} 
$("#main_content").delegate("li","click",function(){ 
if ($(this).index()==0){ 
return false; 
} 
if (!$(this).hasClass("big")){ 
$(this).attr({"h":417,"w":417}) 
}else{ 
$(this).attr({"h":206,"w":206}) 
} 
$(this).toggleClass("big"); 
$(this).parent().hide(); 
var c =$(this).parent().children(); 
c.attr({"x":0,"y":0}); 
arrCol=[0,0,0,0]; 
var tmpArr = c.get(); 
var content = $('<ul></ul>'); 
$("#main_content").append(content); 
setPosition(tmpArr,content,$(this).parent()); 
}) 
$("#addNews").click(function(){ 
var parent = $(this).closest("ul"); 
$(this).parent().after("<li>news</li>"); 
var c = parent.children(); 
var tmpArr = c.get(); 
var content = $('<ul></ul>'); 
$("#main_content").append(content); 
parent.hide(); 
arrCol=[0,0,0,0]; 
setPosition(tmpArr,content, parent); 
}); 
function animate(arr){ 
$(arr).each(function(){ 
$(this).animate({ 
"top":parseInt($(this).attr("top")), 
"left":parseInt($(this).attr("left")), 
"width":parseInt($(this).attr("w")), 
"height":parseInt($(this).attr("h")) 
}) 
}); 
}
Javascript 相关文章推荐
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
Nov 27 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
jquery实现的点击翻书效果代码
Nov 04 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
bootstrap选项卡使用方法解析
Jan 11 Javascript
基于vue.js实现侧边菜单栏
Mar 20 Javascript
Vue页面骨架屏的实现方法
May 22 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
JavaScript JSON数据处理全集(小结)
Aug 15 Javascript
vue页面切换项目实现转场动画的方法
Nov 12 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 #Javascript
表头固定(利用jquery实现原理介绍)
Nov 08 #Javascript
Javascript继承(上)——对象构建介绍
Nov 08 #Javascript
异步javascript的原理和实现技巧介绍
Nov 08 #Javascript
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 #Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 #Javascript
探索Emberjs制作一个简单的Todo应用
Nov 07 #Javascript
You might like
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
tagName的使用,留一笔
2006/06/26 Javascript
javascript一点特殊用法
2008/05/28 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
增大python字体的方法步骤
2020/07/05 Python
python如何快速生成时间戳
2020/07/21 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
final, finally, finalize的区别
2012/03/01 面试题
求职推荐信范文
2013/12/01 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书