- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 jQuery 中的 resizable 函数来调整 Shiny 应用程序中的列宽。不幸的是,我不确定如何将选项传递给 jqui_resizable 函数,以便我可以传递 also_resize 函数,或设置 maxHeight/minHeight。
理想情况下,我希望列具有设置的高度(即全屏),但同步可调整大小的宽度(也占据屏幕的整个宽度)。
下面是我展示我想要什么的非常简单的尝试。不幸的是,鉴于设置的列宽,它不起作用,调整一列的大小以使其更大,将另一列向下移动一行。
任何关于如何做到这一点的想法将不胜感激!谢谢!
library(shiny)
library(shinyjqui)
ui <- fluidPage(
fluidRow(
jqui_resizable(column(6,"text")),
jqui_resizable(column(6,"more text"))
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
最佳答案
这是基于 this codepen 的解决方案.
文件 resizableColumns.js :
$(document).ready(function() {
(function($, window, document, undefined) {
$.widget('ce.resizableGrid', {
_create: function() {
this.resizing = false;
this._on({
'mousedown .resizable-column-handle': '_resizeStartHandler',
'mousemove': '_resizeHandler',
'mouseup': '_resizeStopHandler',
'mouseleave': '_resizeStopHandler'
});
},
_init: function() {
this._createHelpers();
},
_createHelpers: function() {
this.element.addClass('resizable-grid');
this.element.find('> .row:not(.resizable-row)').each(function(rowIndex, rowElement) {
var row = $(rowElement);
row.addClass('resizable-row');
row.find('> [class^="col-"]:not(.resizable-column)').each(function(columnIndex, columnElement) {
var column = $(columnElement);
column.addClass('resizable-column');
column.append(
$('<div>', {
class: 'resizable-column-handle resizable-column-handle-w',
'data-is-west': 'true'
}),
$('<div>', {
class: 'resizable-column-handle resizable-column-handle-e',
'data-is-west': 'false'
})
);
});
});
},
_resizeStartHandler: function(event) {
this.resizing = {};
this.resizing.handle = $(event.currentTarget).addClass('resizable-column-handle-resizing');
this.resizing.column = this.resizing.handle.closest('.resizable-column').addClass('resizable-column-resizing');
this.resizing.row = this.resizing.column.closest('.resizable-row').addClass('resizable-row-resizing');
this.resizing.handleIsWest = this.resizing.handle.data('isWest');
this.resizing.directionIsWest = this._getResizingDirectionIsWest(event.pageX);
this.resizing.columnSize = this._getColumnSize(this.resizing.column);
this.resizing.siblings = this._getResizingSiblings(this.resizing.column);
this.resizing.offsets = this._getResizingOffsets();
this.element.addClass('resizable-grid-resizing');
},
_resizeHandler: function(event) {
if(!this.resizing) {
return;
}
this.resizing.directionIsWest = this._getResizingDirectionIsWest(event.pageX);
var resizingOffsetSize = this._getResizingOffsetSize(event.pageX);
if(resizingOffsetSize && (this.resizing.columnSize !== resizingOffsetSize)) {
if(resizingOffsetSize > this.resizing.columnSize) {
var widestColumn = this._getWidestColumn(this.resizing.siblings),
widestColumnSize = this._getColumnSize(widestColumn);
this._setColumnSize(widestColumn, (widestColumnSize - 1));
this._setColumnSize(this.resizing.column, resizingOffsetSize);
} else {
var narrowestColumn = this._getNarrowestColumn(this.resizing.siblings),
narrowestColumnSize = this._getColumnSize(narrowestColumn);
this._setColumnSize(narrowestColumn, (narrowestColumnSize + 1));
this._setColumnSize(this.resizing.column, resizingOffsetSize);
}
this.resizing.columnSize = resizingOffsetSize;
}
},
_resizeStopHandler: function(event) {
if(!this.resizing) {
return;
}
this.resizing.handle.removeClass('resizable-column-handle-resizing');
this.resizing.column.removeClass('resizable-column-resizing');
this.resizing.row.removeClass('resizable-row-resizing');
this.element.removeClass('resizable-grid-resizing');
this.resizing = false;
},
_getResizingDirectionIsWest: function(x) {
var resizingDirectionIsWest;
if(!this.resizing.directionLastX) {
this.resizing.directionLastX = x;
resizingDirectionIsWest = null;
} else {
if(x < this.resizing.directionLastX) {
resizingDirectionIsWest = true;
} else {
resizingDirectionIsWest = false;
}
this.resizing.directionLastX = x;
}
return resizingDirectionIsWest;
},
_getResizingSiblings: function(column) {
return ((this.resizing.handleIsWest) ? column.prevAll() : column.nextAll());
},
_getResizingOffsetSize: function(x) {
var that = this,
resizingOffsetSize;
$.each(this.resizing.offsets, function(index, offset) {
if((that.resizing.directionIsWest && ((x <= offset.end) && (x >= offset.start))) || (!that.resizing.directionIsWest && ((x >= offset.start) && (x <= offset.end)))) {
resizingOffsetSize = offset.size;
}
});
return resizingOffsetSize;
},
_getResizingOffsets: function() {
var that = this,
row = this.resizing.row.clone(),
css = {
'height': '1px',
'min-height': '1px',
'max-height': '1px'
};
row.removeClass('resizable-row resizable-row-resizing').css(css);
row.children().empty().removeClass('resizable-column resizable-column-resizing').css(css);
this.resizing.row.parent().append(row);
var column = row.children().eq(this.resizing.row.children().index(this.resizing.column)),
totalSize = this._getColumnSize(column);
this._getResizingSiblings(column).each(function() {
totalSize += (that._getColumnSize($(this)) - 1);
that._setColumnSize($(this), 1);
});
var size = ((this.resizing.handleIsWest) ? totalSize : 1),
sizeEnd = ((this.resizing.handleIsWest) ? 1 : totalSize),
sizeOperator = ((this.resizing.handleIsWest) ? -1 : 1),
offset = 0,
offsetOperator = ((this.resizing.handleIsWest) ? 1 : 0);
var columnGutter = ((column.outerWidth(true) - column.width()) / 2),
columnWidth = ((this.resizing.handleIsWest) ? false : true);
var resizingOffsets = [];
while(true) {
this._setColumnSize(column, size);
this._setColumnOffset(column, offset);
var left = (Math.floor((column.offset()).left) + columnGutter + ((columnWidth) ? column.width() : 0));
resizingOffsets.push({
start: (left + ((columnGutter * 3) * -1)),
end: (left + (columnGutter * 3)),
size: size
});
if(size === sizeEnd) {
break;
}
size += sizeOperator;
offset += offsetOperator;
}
row.remove();
return resizingOffsets;
},
_getWidestColumn: function(columns) {
var that = this,
widestColumn;
columns.each(function() {
if(!widestColumn || (that._getColumnSize($(this)) > that._getColumnSize(widestColumn))) {
widestColumn = $(this);
}
});
return widestColumn;
},
_getNarrowestColumn: function(columns) {
var that = this,
narrowestColumn;
columns.each(function() {
if(!narrowestColumn || (that._getColumnSize($(this)) < that._getColumnSize(narrowestColumn))) {
narrowestColumn = $(this);
}
});
return narrowestColumn;
},
_getColumnSize: function(column) {
var columnSize;
$.each($.trim(column.attr('class')).split(' '), function(index, value) {
if(value.match(/^col-/) && !value.match(/-offset-/)) {
columnSize = parseInt($.trim(value).replace(/\D/g, ''), 10);
}
});
return columnSize;
},
_setColumnSize: function(column, size) {
column.toggleClass([
['col', 'sm', this._getColumnSize(column)].join('-'), ['col', 'sm', size].join('-')
].join(' '));
},
_getColumnOffset: function(column) {
var columnOffset;
$.each($.trim(column.attr('class')).split(' '), function(index, value) {
if(value.match(/^col-/) && value.match(/-offset-/)) {
columnOffset = parseInt($.trim(value).replace(/\D/g, ''), 10);
}
});
return columnOffset;
},
_setColumnOffset: function(column, offset) {
var currentColumnOffset,
toggleClasses = [];
if((currentColumnOffset = this._getColumnOffset(column)) !== undefined) {
toggleClasses.push(['col', 'sm', 'offset', currentColumnOffset].join('-'));
}
toggleClasses.push(['col', 'sm', 'offset', offset].join('-'));
column.toggleClass(toggleClasses.join(' '));
},
_destroy: function() {
this._destroyHelpers();
},
_destroyHelpers: function() {
this.element.find('.resizable-column-handle').remove();
this.element.find('.resizable-column').removeClass('resizable-column resizable-column-resizing');
this.element.find('.resizable-row').removeClass('resizable-row resizable-row-resizing');
this.element.removeClass('resizable-grid resizable-grid-resizing');
}
});
})(jQuery, window, document);
$('#layout').resizableGrid();
});
.container {
margin-top: 50px;
}
.row {
background-color: rgba(189, 195, 199, 0.25);
}
.row:hover {
background-color: rgba(189, 195, 199, 0.5);
}
.row > .col-sm-1,
.row > .col-sm-2,
.row > .col-sm-3,
.row > .col-sm-4,
.row > .col-sm-5,
.row > .col-sm-6,
.row > .col-sm-7,
.row > .col-sm-8,
.row > .col-sm-9,
.row > .col-sm-10,
.row > .col-sm-11,
.row > .col-sm-12 {
min-height: 100px;
}
.row > .col-sm-1:before,
.row > .col-sm-2:before,
.row > .col-sm-3:before,
.row > .col-sm-4:before,
.row > .col-sm-5:before,
.row > .col-sm-6:before,
.row > .col-sm-7:before,
.row > .col-sm-8:before,
.row > .col-sm-9:before,
.row > .col-sm-10:before,
.row > .col-sm-11:before,
.row > .col-sm-12:before {
content: '';
display: block;
position: absolute;
top: 0;
right: 15px;
bottom: 0;
left: 15px;
background-color: rgba(52, 152, 219, 0.25);
}
.row > .col-sm-1:hover:before,
.row > .col-sm-2:hover:before,
.row > .col-sm-3:hover:before,
.row > .col-sm-4:hover:before,
.row > .col-sm-5:hover:before,
.row > .col-sm-6:hover:before,
.row > .col-sm-7:hover:before,
.row > .col-sm-8:hover:before,
.row > .col-sm-9:hover:before,
.row > .col-sm-10:hover:before,
.row > .col-sm-11:hover:before,
.row > .col-sm-12:hover:before {
background-color: rgba(52, 152, 219, 0.5);
}
/* Resizable Grid */
.resizable-grid > .resizable-row > .resizable-column > .resizable-column-handle {
z-index: 100;
display: none;
position: absolute;
top: 0;
height: 100%;
width: 6px;
cursor: col-resize;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-ms-touch-action: none;
touch-action: none;
}
.resizable-grid > .resizable-row > .resizable-column > .resizable-column-handle-w {
left: 12px;
}
.resizable-grid > .resizable-row > .resizable-column > .resizable-column-handle-e {
right: 12px;
}
.resizable-grid > .resizable-row > .resizable-column:first-child:not(:last-child) > .resizable-column-handle-e,
.resizable-grid > .resizable-row > .resizable-column:not(:first-child):not(:last-child) > .resizable-column-handle-w,
.resizable-grid > .resizable-row > .resizable-column:not(:first-child):not(:last-child) > .resizable-column-handle-e,
.resizable-grid > .resizable-row > .resizable-column:last-child:not(:first-child) > .resizable-column-handle-w {
display: block;
}
.resizable-grid-resizing {
cursor: col-resize;
}
.resizable-grid > .resizable-row-resizing > .resizable-column:not(.resizable-column-resizing) {
opacity: 0.5;
}
library(shiny)
ui <- fluidPage(
tags$head(
tags$script(src = "https://code.jquery.com/ui/1.12.1/jquery-ui.js"),
tags$link(rel = "stylesheet", href = "resizableColumns.css"),
tags$script(src = "resizableColumns.js")
),
tags$div(
id = "layout",
fluidRow(
column(
width = 3,
h3("column1")
),
column(
width = 3,
h3("column2")
),
column(
width = 3,
h3("column3")
),
column(
width = 3,
h3("column4")
)
)
)
)
server <- function(input, output){}
shinyApp(ui, server)
关于javascript - 使用 jQuery 在 R-Shiny 中调整列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423343/
我是 Javascript 新手,所以请原谅基本代码。有什么方法可以让我使用用户输入的指定调整来打印代码? height: width: 最佳答案 为按钮
我有一个带有 A 框架的场景,我正在使用方法 getCanvas 来获取屏幕截图并将其发送到 PHP。有没有办法调整 getCanvas 图像大小?因为默认的是 4096x2048,我需要它更小。如果
安排自动“分析表”的方法是什么。当大量数据通过插入和删除发生更改时,是否可以请求自动“分析表”?参数化自动分析表过程的方法是什么,即设置何时应该触发的规则。 最佳答案 您使用的是哪个版本的 Oracl
我只是想说,我是 C 语言的新手。好吧,除此之外,我在圣诞假期的任务是编写一个以各种方式操作 PNG 图像的程序。我已经完成了大部分事情,但是在尝试编写放大图像的程序时遇到了问题。我已经尝试过了,并且
在 Postgres 中编写更快查询的有效方法是什么?请不要包括一般良好的数据库实践(例如使用索引或规范化)。我正在寻找像派生表比子查询工作得更快或使用 python 字符串函数似乎比 pgsql 字
我不知道自己做了什么,但我要么将页眉和导航向右移动,要么将页面的其余部分向左移动。使用 tw Bootstrap 。我想不通。我对它进行了调试并查看了我的 css 编辑,没有看到任何负边距(我怀疑是这
我希望能够增加默认字体大小,但只能在特定的 DIV 内。 很明显,这似乎正是 ems 所针对的那种情况。我的问题是我只想增加字体大小,而不影响使用em设置大小的其他内容,例如填充和边距。 这可能看起来
我正在我的大学上数据挖掘类(class)。我真的不明白这个问题。谁能帮我理解一下? 最佳答案 重要性权重让您了解在采样时找到特定数据点的频率。您可以使用它来增加训练数据集。例如,如果您只有两个数据点:
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我的部分程序如下所示: char *argVector[] = {"./doTasks","0", "1", "3", NULL}; int numChild = 3; int temp; char
我在调整 QWindow 大小时观察到一个奇怪的行为。当我调整窗口大小时使宽度和高度都增加或减少时,窗口不会以白色背景闪烁。但是当我增加宽度同时减小高度(或反之亦然)时,窗口会闪烁并暂时用白色填充新的
我在使用 ggplot2 创建图形时遇到问题。我正在使用带有中心堆叠的 geom_dotplot 来显示我的数据,这些数据是 4 个类别的离散值。 出于审美原因,我想自定义点的位置,这样 沿 y 轴减
在尝试让我的 Canvas/Stage 调整大小并使其正确适合父容器时遇到一些问题。我发现了其他类似的帖子,虽然答案确实帮助我获得了新的屏幕尺寸,但它仍然不想适应容器,而是直接进入屏幕的边缘(这在示例
我想将路径大小调整为 20 像素左右。 SVG 的大小应为 500 * 500,现在路径宽度为 297,高度为 180.7。现在我需要这条路径,其宽度为 277,高度为 160.7,在之前的路径中。
我有一个矩形 svg,可以围绕二维平面拖动,围绕它自己的原点旋转并调整大小。 class SVG extends React.Component { constructor(props) {
我一直在尝试调整 MLP 模型的超参数来解决回归问题,但我总是收到收敛警告。 这是我的代码 def mlp_model(X, Y): estimator=MLPRegressor() param_gr
我正在创建一个聊天应用程序,我希望 ScrollView 的内容位于输入字段下方(向上滚动时)。我已经将 ScrollView 和输入字段放在 ZStack 中。 ScrollView 上的底部填充使
我遇到 GC 来不及删除空闲对象的情况。该代码将一个大文档加载到内存中并循环处理它。如果我在此循环中停止(在 Debug模式下)或添加 GC.Collect(),内存使用量将下降到 70 MB 以下。
我正在使用 iTextSharp 和 PdfSharp 的组合来组装一个大型 PDF 文件,以便打印到 Canon Oce VarioPrint 6000 系列打印机。 PDF 正在替换后记文件。 这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!