项目现在是这样要求的.
有3种方块1*1 1*2 2*2每行4个格子.
由上到下的自动排列.这些方块都是由用户自己上传的.
所以没有任何规律性.
前端用脚本处理.
想了几天也没有一个较好的解决方案.
有人能提供一个思路吗~~跪求
有3种方块1*1 1*2 2*2每行4个格子.
由上到下的自动排列.这些方块都是由用户自己上传的.
所以没有任何规律性.
前端用脚本处理.
想了几天也没有一个较好的解决方案.
有人能提供一个思路吗~~跪求
解决方案 »
- 关于jQuery“全部删除按扭”问题?
- 怎样获得上一个<IMG>标签
- 正则匹配
- 一个checkbox框,跟着一个文本框,如果没有勾check,无需检查文本框是否输入,如果勾了checkbox,则必须要输入文本框,这个如何写?
- 自己写的jquery autocomplete控件,提供源代码下载,请各位大侠多给建议
- 请问,如何用JS获得kindeditor编辑框内的第一个img标签的src???
- [请问]两个JavaScript问题
- 如何用javascript把IE地址栏去掉?
- 如何向父窗体传值?
- js下拉菜单 求大神指教
- js 用正则表达式 把 字符串 {day}天交易{money}元 中的 {day} {money} 替换为 day:1 money:10000
- jQuery Autocomplete中文问题
代码很坑爹.(function () {
$.fn.ListLayout = function () {
var $global = this;
var $x = 0, $y = 0, $order = 0;//定义排序计数器
var $count = 0;
var $nowCount = 0;
var $arrObj = [];//定义元素容器
var $LineObj = [];
var $layout = [];//定义布局数组
var $position = [];
var $raN = 8;//随机器 //排序
//4个2
//4//
$layout[0] = "2|2|2|2";
$position[0] = "0.0|0.360|180.0|180.360"; //3个2;2个1
//5
$layout[1] = "2|2|1|2|1";
$layout[2] = "2|2|2|1|1";
$layout[3] = "2|2|1|1|2";
$layout[4] = "1|2|1|2|2";
$layout[5] = "1|1|2|2|2";
$position[1] = "0.0|0.360|180.0|180.180|180.540";
$position[2] = "0.0|0.360|180.0|180.360|180.540";
$position[3] = "0.0|0.360|180.0|180.180|180.360";
$position[4] = "0.0|0.180|0.540|180.0|180.360";
$position[5] = "0.0|0.180|0.360|180.0|180.360"; //2个2;4个1
//6
$layout[6] = "2|2|1|1|1|1";
$layout[7] = "1|2|1|1|2|1";
$layout[8] = "1|2|1|2|1|1";
$layout[9] = "1|2|1|1|1|2";
$position[6] = "0.0|0.360|180.0|180.180|180.360|180.540";
$position[7] = "0.0|0.180|0.540|180.0|180.180|180.540";
$position[8] = "0.0|0.180|0.540|180.0|180.360|180.540";
$position[9] = "0.0|0.180|0.540|180.0|180.180|180.360"; //1个2;6个1;
//7
$layout[13] = "2|1|1|1|1|1|1";
$layout[14] = "1|2|1|1|1|1|1";
$layout[15] = "1|1|2|1|1|1|1";
$position[13] = "0.0|0.360|0.540|180.0|180.180|180.360|180.540";
$position[14] = "0.0|0.180|0.540|180.0|180.180|180.360|180.540";
$position[15] = "0.0|0.180|0.360|180.0|180.180|180.360|180.540"; //大方格布局
//2//
$layout[19] = "3|3";
$position[19] = "0.0|0.360";
//3//
$layout[20] = "3|2|2";
$layout[21] = "2|2|3";
$position[20] = "0.0|0.360|180.360";
$position[21] = "0.0|180.0|0.360";
//4//
$layout[22] = "1|1|2|3";
$layout[23] = "2|1|1|3";
$position[22] = "0.0|0.180|180.0|0.360";
$position[23] = "0.0|180.0|180.180|0.360"; //开始
StartEach(); function setStyle(_obj, point) {
if (point.indexOf(".") != -1) {
var xy = [];
xy = point.split(".");
var top = ($y * 360) + (xy[0] - 1 + 1);
_obj.css({ "top": top + "px", "left": xy[1] + "px" }).removeClass("hidden");
}
else {
_obj.css({ "top": top + "px", "left": (($x % 4) * 180) + "px" });
}
if (_obj.hasClass("metro-1")) $x++;
if (_obj.hasClass("metro-2")) $x += 2;
if (_obj.hasClass("metro-3")) $x += 4;
if (($x % 8) == 0) $y += 1;
} function startLayout(n) {
var obj;
var n = n - 1 + 1;
var Lay = [];
var Pos = [];
Lay = $layout[n].split("|");
Pos = $position[n].split("|");
var x = 0;
while (x < Lay.length) {
Lay[x] = (Lay[x] - 1 + 1);
if (Lay[x] == 1) {
var y = 0;
while (y < $arrObj.length) {
if (!$arrObj[y].hasClass("done")) {
if ($arrObj[y].hasClass("metro-1")) {
$obj = $arrObj[y];
$obj.addClass("done");
setStyle($obj, Pos[x]);
y = $arrObj.length;
}
}
y++;
}
}//1
if (Lay[x] == 2) {
var y = 0;
while (y < $arrObj.length) {
if (!$arrObj[y].hasClass("done")) {
if ($arrObj[y].hasClass("metro-2")) {
$obj = $arrObj[y];
$obj.addClass("done");
setStyle($obj, Pos[x]);
y = $arrObj.length;
}
}
y++;
}
}//2
if (Lay[x] == 3) {
var y = 0;
while (y < $arrObj.length) {
if (!$arrObj[y].hasClass("done")) {
if ($arrObj[y].hasClass("metro-3")) {
$obj = $arrObj[y];
$obj.addClass("done");
setStyle($obj, Pos[x]);
y = $arrObj.length;
}
}
y++;
}
}//3
x++;
}
} function elementLayout() {
var b1 = 0, b2 = 0, b3 = 0;
var der = $LineObj.length - 1;
var n = 0;
while (n <= der) {
if ($LineObj[n].hasClass("metro-1")) {
b1++;
}
if ($LineObj[n].hasClass("metro-2")) {
b2++;
}
if ($LineObj[n].hasClass("metro-3")) {
b3++;
}
n++;
}
_str = (der + 1) + "|" + b1 + "|" + b2 + "|" + b3;
boxLayout(_str);
} function boxLayout(n) {//随机排序
var str = n;
var pArm = str.split("|");
var All = (pArm[0] - 1 + 1);
var metro1 = (pArm[1] - 1 + 1);
var metro2 = (pArm[2] - 1 + 1);
var metro3 = (pArm[3] - 1 + 1);
if (All == 2) startLayout(19);//2布局
if ((All == 3) || (All == 4)) {//3\4布局
if (All == 4) {
if (metro3 == 0) startLayout(0);
if (metro3 == 1) {
if (metro2 == 1) startLayout(layoutRandom(22, 25));
}
}
if (All == 3) {
if (metro2 == 2) startLayout(layoutRandom(20, 21));
}
}
if (All == 5) {
if (metro3 == 1) startLayout(26);
if (metro2 == 3) startLayout(layoutRandom(1, 5));
}
if (All == 6) {
startLayout(layoutRandom(6, 12));
}
if (All == 7) {
startLayout(layoutRandom(13, 18));
}
} function layoutRandom(x, y) {
//x下限 - y上限
return parseInt(Math.random() * (y - x + 1) + x);
} function StartEach() {
$arrObj = [];
$count = 0;
$("p.noLayout", $global).each(function () {
$arrObj.push($(this));
var str = $(this).attr("class");
var NumArr = [];
NumArr = str.split(" ");
$count += (NumArr[0] - 1);
if ($arrObj.length == getByCount()) {
whileDoSet();
}
});
} function getByCount() {
return $("p.noLayout", $global).size();
}; function whileDoSet() {
var n = $count;
var ind_end = getByCount();
var ind_x = 0, box = 0;
$LineObj = [];
while (ind_end--) {
obj = $arrObj[ind_x];
if (box == 8) {
elementLayout();
if ($count >= 8) {
StartEach();
}
break;
}
if ($count >= 8) {
if (obj.hasClass("2")) {
if ((box == 0) || (box == 2)) {
///
if (layoutRandom(0, 10) <= 3) {
obj.removeClass("2").removeClass("noLayout").addClass("metro-3").addClass("hidden");
$LineObj.push(obj);
box += 4;
}
else {
obj.removeClass("2").removeClass("noLayout").addClass("metro-1").addClass("hidden");
$LineObj.push(obj);
box += 1;
}
///
}
else {
obj.removeClass("2").removeClass("noLayout").addClass("metro-1").addClass("hidden");
$LineObj.push(obj);
box += 1;
}
//
}
if (obj.hasClass("3")) {
if ((box == 3) || (box == 7)) {
ind_x++;
continue;
}
else {
obj.removeClass("3").removeClass("noLayout").addClass("metro-2").addClass("hidden");
$LineObj.push(obj);
box += 2;
}
}
}
else {
obj.hide();
//if (obj.hasClass("2")) { //}
//if (obj.hasClass("3")) { //}
}
ind_x++;
}
};
};
})(jQuery);
1. 定义格子的大小
2. 注意用浮动布局其他的动态的加数据就行了。