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 相关文章推荐
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
页面定时刷新(1秒刷新一次)
Nov 22 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
怎样判断jQuery当前元素是隐藏还是显示
Nov 23 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
Es6 Generator函数详细解析
Feb 24 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
vue-cli3 配置开发与测试环境详解
May 17 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
层叠菜单的动态生成
2006/10/09 PHP
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP中echo和print的区别
2014/08/28 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
javascript中clone对象详解
2014/12/03 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
python插入排序算法实例分析
2015/07/03 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
python 简单的调用有道翻译
2020/11/25 Python
python脚本定时发送邮件
2020/12/22 Python
python 图像增强算法实现详解
2021/01/24 Python
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
opencv实现图像几何变换
2021/03/24 Python
体育专业个人的求职信范文
2013/09/21 职场文书
服务承诺书范文
2014/05/19 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
离职信范本
2015/06/23 职场文书
2016年母亲节寄语
2015/12/04 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL