javascript - Yii2 表格缩放列宽,页面刷新后保持不变怎么实现?
程序员文章站
2022-04-29 16:46:30
...
1、Yii2 DynaGrid插件生成的列表可以手动拖动每一列的宽度,但是拖动之后怎么保存?使刷新页面后还是刚才拖动停止的宽度。
主要代码如下:(由rc-table-resizing与rc-column-resizing这两class控制)
注释:以下是源码,不能改动,要重写。
ResizableColumns.prototype.pointerdown = function(e) {
var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths;
e.preventDefault();
$ownerDocument = $(e.currentTarget.ownerDocument);
startPosition = pointerX(e);
$currentGrip = $(e.currentTarget);
$leftColumn = $currentGrip.data('th');
$rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1);
widths = {
left: parseWidth($leftColumn[0]),
right: parseWidth($rightColumn[0])
};
newWidths = {
left: widths.left,
right: widths.right
};
this.$handleContainer.add(this.$table).addClass('rc-table-resizing');
$leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing');
this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
$ownerDocument.on('mousemove.rc touchmove.rc', (function(_this) {
return function(e) {
var difference;
difference = (pointerX(e) - startPosition) / _this.$table.width() * 100;
setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference));
setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference));
if (_this.options.syncHandlers != null) {
_this.syncHandleWidths();
}
return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
};
})(this));
return $ownerDocument.one('mouseup touchend', (function(_this) {
return function() {
$ownerDocument.off('mousemove.rc touchmove.rc');
_this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing');
$leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing');
_this.syncHandleWidths();
_this.saveColumnWidths();
return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
};
})(this));
};
return ResizableColumns;
})();
回复内容:
1、Yii2 DynaGrid插件生成的列表可以手动拖动每一列的宽度,但是拖动之后怎么保存?使刷新页面后还是刚才拖动停止的宽度。
主要代码如下:(由rc-table-resizing与rc-column-resizing这两class控制)
注释:以下是源码,不能改动,要重写。
ResizableColumns.prototype.pointerdown = function(e) {
var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths;
e.preventDefault();
$ownerDocument = $(e.currentTarget.ownerDocument);
startPosition = pointerX(e);
$currentGrip = $(e.currentTarget);
$leftColumn = $currentGrip.data('th');
$rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1);
widths = {
left: parseWidth($leftColumn[0]),
right: parseWidth($rightColumn[0])
};
newWidths = {
left: widths.left,
right: widths.right
};
this.$handleContainer.add(this.$table).addClass('rc-table-resizing');
$leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing');
this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
$ownerDocument.on('mousemove.rc touchmove.rc', (function(_this) {
return function(e) {
var difference;
difference = (pointerX(e) - startPosition) / _this.$table.width() * 100;
setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference));
setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference));
if (_this.options.syncHandlers != null) {
_this.syncHandleWidths();
}
return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
};
})(this));
return $ownerDocument.one('mouseup touchend', (function(_this) {
return function() {
$ownerDocument.off('mousemove.rc touchmove.rc');
_this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing');
$leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing');
_this.syncHandleWidths();
_this.saveColumnWidths();
return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
};
})(this));
};
return ResizableColumns;
})();
这是css控制的,你可以设置一个session,保存下你的列表的宽度,刷新的时候,就可以用js赋值给css就可以了。
楼上说的没错呢