将数组中的对象按照浏览器的x/y轴的显示方式进行排序

假如说现在有一组图片用绝对定位的方式进行显示,top/left值是随机排列的,也就是说按照文档流查找到的图片和浏览器显示的顺序不一致,这个时候我们就需要将数组中的对象按照浏览器的x/y轴的显示方式进行排序。

浏览器的渲染是按照浏览器的x/y轴进行显示的,只有当一行显示完才会显示下一行,所以和我们现在写字的方式是一致的。

实际上将数组中的对象按照浏览器的x/y轴的显示方式进行排序,也就是将数组中的对象按照x/y的两个属性值进行排序,并且x的优先级大于y的优先级(必须先按照x轴显示、再按照y轴显示)。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>将数组中的对象按照浏览器的x/y轴的显示方式进行排序</title>
    <script src="jquery-1.11.3.js"></script>
</head>
<body>
<script>
var getArray = [];
var array = [{index: 1, x: 1, y: 3},{index: 2, x: 3, y: 1},{index: 3, x: 2, y: 2},
            {index: 4, x: 2, y: 1},{index: 5, x: 1, y: 2},{index: 6, x: 3, y: 3},
            {index: 7, x: 3, y: 2},{index: 8, x: 2, y: 3},{index: 9, x: 1, y: 1}];
array = array.sort(compare("x"));
// 此处的3表示一行显示几列
array = sliceArray(array, 3);
$.each(array, function(i, n){
    n = n.sort(compare("y"));
    $.each(n, function(j, k){
        getArray.push(k);
    })
})
function compare(property){
    return function(a,b){
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;
    }
}
/*
 * 将一个数组分成几个同等长度的数组
 * array[分割的原数组]
 * size[每个子数组的长度]
 */
function sliceArray(array, size) {
    var result = [];
    for (var x = 0; x < Math.ceil(array.length / size); x++) {
        var start = x * size;
        var end = start + size;
        result.push(array.slice(start, end));
    }
    return result;
}   
console.log(getArray);
</script>   
</body>
</html>

输出结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值