我試圖讓引導行中的列通過拖拽方式增量調整大小到各自的列大小。他們必須總共添加12列。拖動調整大小的引導列jQuery UI
See an example of what I'm trying to achieve
的什麼,我需要最接近的例子是在這裏:http://jsfiddle.net/onigetoc/ag4mgpbs/然而他們周圍的列取決於其旁邊的列不會進行調整或大或小。
我已經看過使用[gridstack.js來實現這一點,但我無法正確使用基本的jQuery/jQuery UI添加或減去列的邏輯。
我寫的代碼肯定是走錯了方向,我無法弄清楚爲什麼當我期望它們時列不會加起來,這可能與事件有關我在用着。
var oldColNum = 0;
var nextColFraction = 0;
$('.column').resizable({
handles: 'e',
containment: 'parent',
start: function (e, ui) {
var nextCol = $(this).nextAll('.column').get(0);
nextColFraction = $(nextCol).data('fraction');
$(this).closest('.row').find('.column').css("width", '');
},
resize: function (e, ui) {
// console.clear();
/**
* The Column currently being resized
*/
var thisCol = ui.element;
oldColNum = thisCol.data('fraction');
/**
* The parenting row
*/
var parentRow = thisCol.closest('.row');
/**
* The Other Columns
*/
var nextCol = thisCol.nextAll('.column').get(0);
var otherCols = parentRow.find('.column').not(thisCol);
var otherColFractions = [];
otherCols.each(function() {
otherColFractions.push($(this).data('fraction'));
});
var totalOtherFractions = otherColFractions.reduce(function(a, b) { return a + b }, 0);
/**
* Work out the percentage width it currently is
*/
var cellPercentWidth = (100 * thisCol.outerWidth()/parentRow.outerWidth());
/**
* Change the class to the one that best suits the current size
*/
var colNum = getClosest(gridSystem, cellPercentWidth);
console.log(colNum, ui.originalElement.data('fraction'));
if (colNum < ui.originalElement.data('fraction')) {
nextColFraction++;
$(nextCol).removeClass(bsClass)
.addClass('col-md-' + nextColFraction)
.attr('data-fraction', nextColFraction);
}
if (colNum > ui.originalElement.data('fraction')) {
nextColFraction--;
$(nextCol).removeClass(bsClass)
.addClass('col-md-' + nextColFraction)
.attr('data-fraction', nextColFraction);
}
thisCol.removeClass(bsClass)
.addClass('col-md-' + colNum)
.attr('data-fraction', colNum);
thisCol.css("width", '');
}
});
});
// Bootstrap grid system array
var gridSystem = [
{grid: 8.33333333, col: 1},
{grid: 16.66666667, col: 2},
{grid: 25, col: 3},
{grid: 33.33333333, col: 4},
{grid: 41.66666667, col: 5},
{grid: 50, col: 6},
{grid: 58.33333333, col: 7},
{grid: 66.66666667, col: 8},
{grid: 75, col: 9},
{grid: 83.33333333, col: 10},
{grid: 91.66666667, col: 11},
{grid: 100, col: 12}
];
// find the closest number from Bootstrap grid
function getClosest(arr, value) {
var closest, mindiff = null;
for (var i = 0; i < arr.length; ++i) {
var diff = Math.abs(arr[i].grid - value);
if (mindiff === null || diff < mindiff) {
// first value or trend decreasing
closest = i;
mindiff = diff;
} else {
return arr[closest]['col']; // col number
}
}
return null;
}
任何幫助將不勝感激。
感謝您的幫助!這東西開始讓我頭疼 –