いずれかの方法でドラッグして、それぞれのカラム・サイズに段階的にスナップ・サイズを変更するためのブート・ストラップ行のカラムを取得しようとしています。常に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;
}
ご協力いただければ幸いです。
助けてくれてありがとう!このものは私に頭痛を与え始めている –