`
ldl_xz
  • 浏览: 68780 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

 
阅读更多

enter image description here

首先,我们来讲下需求:

1.图片分为大小和小图,大图占四个小图的位置,

2.点击图片放大缩小, 重新排列顺序,

  1. 当点击偶数列(2,4)时,它前面的那项将向提出来向后面排列

4.第一个项不能动,点第二个是将占第三四的位置,从后面取第一个小的放置在第二的位置上。

需求就是这样的了,现在难度是否有加大呢,我的思路就是按照这个需求一步步去实现的。代码如下:

<!--more-->
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"))
        })
    });
  }

demo地址


转载自:http://www.9958.pw/post/js_images_sort

分享到:
评论

相关推荐

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

    在介绍如何使用JavaScript和jQuery来实现图片放大缩小功能,并在每次操作后对其他图片进行复杂排序的技术时,首先需要了解的核心概念和知识点包括: 1. **图片的放大缩小**: 这是指通过JavaScript和jQuery来改变...

    layui表格内放置图片,并点击放大的实例

    在Web开发中,实现表格中图片的展示以及点击放大功能是一个常见的需求,尤其是在产品展示、商品列表、个人相册等应用场景中。通过这个实例我们可以学习到如何利用layui这个前端UI框架实现上述需求,具体涉及到的是...

    基于vue2vuedraggableechartsiview写的的一个可拖拽图表的demo

    在IT行业中,前端开发是至关重要的一个领域,而Vue.js作为一款流行的JavaScript框架,因其轻量级、易学易用的特性受到了广大开发者喜爱。在这个"基于vue2 vuedraggable echarts iview写的可拖拽图表的demo"中,我们...

    基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能

    在AngularJS中,实现拖拽排序功能可以借助第三方插件,比如ngDraggable.js。ngDraggable.js是一个轻量级的AngularJS插件,它提供了一系列自定义指令,使得开发者能够方便地添加拖放功能到AngularJS应用中,从而创建...

    JavaScript实战.pdf

    - JavaScript实现图片轮播、放大缩小等功能。 #### 四、学习目标 - **基础语法**:掌握JavaScript的基本语法结构,包括变量声明、数据类型、流程控制语句等。 - **DOM操作**:学会使用DOM API操作网页元素,实现...

    可拖动的图片相框插件.zip

    例如,当用户滚动鼠标滚轮时,图片可以按比例放大或缩小;拖放排序则需要维护一个图片顺序列表,并在拖放事件触发时更新这个列表。 在实际应用中,这个插件可以广泛应用于各种网站,尤其是那些需要展示多张图片的...

    网页设计中的特效 导航,广告图片等

    5. **悬停效果**:在按钮、链接或图片上鼠标悬停时,可以触发一些视觉变化,如颜色变换、放大缩小、旋转等,js能轻松实现这些动态效果,增加互动性。 6. **滚动动画**:当用户滚动页面时,某些元素可以按照预设轨迹...

    jquery图片插件

    2. **图片缩放**:jQuery图片插件通常包含图片的放大和缩小功能,允许用户以平滑的方式查看图片细节,提升用户体验。 3. **图片轮播**:许多插件支持图片轮播效果,可以设置自动播放、导航箭头、过渡效果等,适用于...

    Extjs4 图片浏览器

    Grid支持分页、排序和过滤功能,可以根据需要进行定制。 3. **ImageViewer(图像查看器)**:这是一个特殊的组件,用于展示选中的大图,并提供放大、缩小、旋转等操作。它可能还包含滑动条以控制图片的放大比例。 ...

    仿163-qq-图片浏览

    4. **缩放功能**:具备双指缩放手势,允许用户放大或缩小图片以查看细节。 5. **全屏模式**:提供全屏查看模式,增强用户的沉浸式体验。 6. **图片预览**:可能包含快速预览功能,用户在文件夹中只需鼠标悬停即可...

    照片墙动态展示效果

    标题“照片墙动态展示效果”暗示了我们要探讨的是一个基于网页的图片展示系统,这种系统在用户悬停鼠标在某一图片上时,会呈现出大图效果,同时其他图片则缩小为小图样式,营造出类似照片墙的视觉体验。这种效果通常...

    静态相册程序

    3. 图片缩放与平移:允许用户放大或缩小图片,或者在相册中平移查看细节。 4. 响应式设计:确保相册在不同设备和屏幕尺寸上都能正常显示,这通常涉及到媒体查询和布局调整。 5. 图片预览:点击缩略图后,可以弹出...

    触屏手势库,基于Winter和Zepto.js完成_JavaScript_下载.zip

    基于Winter和Zepto.js完成的触屏手势库,提供了丰富的手势识别功能,使得开发者能够利用JavaScript轻松地实现类似于滑动、捏合、旋转、拖放等触摸操作。下面我们将深入探讨这个库的核心概念、工作原理以及如何在实际...

    14个网页特效经典案例

    14. **地图交互**:通过JavaScript与Google Maps API或Leaflet等库结合,可以创建可交互的地图,用户可以放大、缩小、标记地点。 这些经典案例展示了JavaScript在网页设计中的强大功能,无论是提升用户体验还是增加...

    Javascript框架Script.aculo.us的英文文档

    - 下载压缩包后解压至项目目录中的`js`文件夹。 - 在HTML文件中通过`&lt;script&gt;`标签引用`scriptaculous.js`文件。 - 可选地,如果需要使用拖拽等功能,还需引入`prototype.js`。 ##### 2.2 快速入门 - **基本用法...

    把图片转换成网页 1.0 绿色英文版.rar

    7. 互联网传播:将图片转换为网页格式,可以方便地通过电子邮件、论坛、博客等方式进行分享,扩大了图片的传播范围。 8. SEO优化:对于需要搜索引擎可见的图片,将其转换为网页形式,可以添加元数据(如标题、描述...

    20个优秀JavaScript导航菜单.doc

    - 使用JavaScript实现菜单项的放大缩小效果。 - CSS用于定义菜单的基本样式。 ##### 10. 简单JavaScript手风琴效果菜单 - **特性**:复合手风琴状菜单。 - **技术要点**: - 利用JavaScript控制菜单项的展开和...

    html各种手势,比较齐全

    2. **捏合缩放(Pinch-to-zoom)**:这个手势允许用户通过两个手指同时靠近或远离对方来放大或缩小页面元素,如地图、图片或文本。这是响应式设计的关键组成部分,使用户能够在小屏幕上更好地查看内容。 3. **双击...

    ThreeJS-Interactive-Wireframe:在正弦函数、Dat.GUI 和 Three.js 的帮助下,可以实现迷幻的视觉效果

    ThreeJS-交互式线框在正弦函数、Dat.GUI 和 Three.js 的帮助下,可以实现迷幻的视觉效果。指示在现代浏览器中访问。 也应该在智能手机上工作。 用鼠标滚轮放大和缩小。 智能手机目前无法缩放。 单击两个小对象以切换...

Global site tag (gtag.js) - Google Analytics