手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >js实现图片放大缩小功能后进行复杂排序的方法
js实现图片放大缩小功能后进行复杂排序的方法
摘要:这是一个基于jquery的图片效果,它的作用是:当图片点击变大(变小)时,其它图片按照一定的规则进行排序运动。首先来看下最终的效果图:有人可...

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

首先来看下最终的效果图:

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

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

首先,我们来讲下需求:

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"))

})

});

}

【js实现图片放大缩小功能后进行复杂排序的方法】相关文章:

JS实现简单路由器功能的方法

Jquery实现动态切换图片的方法

js实现字符串转日期格式的方法

js+html5绘制图片到canvas的方法

javascript实现十秒钟后注册按钮可点击的方法

javascript实现在网页任意处点左键弹出隐藏菜单的方法

js实现从右向左缓缓浮出网页浮动层广告的方法

JQuery+CSS实现图片上放置按钮的方法

JQuery实现动态添加删除评论的方法

js实现鼠标划过给div加透明度的方法

精品推荐
分类导航