- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个自定义小部件,允许元素调整大小,其高度和宽度受其父元素限制。可调整大小的小部件上的包含选项允许这样做,但我需要一个额外的标准。我只需要允许在兄弟元素未使用的空间中调整元素的大小...如果您在元素 .xyz 上使用可调整大小的小部件,它将限制 .xyz 到父元素边界,但会将元素 .xyz 的兄弟元素推到父元素边界之外父元素边界!我怎样才能实现这个额外的标准?
如果您不明白我想要做什么,我可以更好地解释,请告诉我。
我之前曾经实现过这个工作,但我对实现它的方式并不满意。我在另一个论坛上发帖,但从未得到任何帮助。
编辑:
我能够以比我发布到 webdevelper.com 的方式更好的方式来完成此操作。我将自定义 $.ui.plugin.add 方法附加到“可调整大小”小部件。现在我可以向可调整大小的小部件传递“ sibling :父级”选项,这允许我上面提到的标准。如果您知道更好的方法,请告诉我。我认为必须有一种更直接的方法来减少代码复制。我复制了整个收容方法并将其用作我的兄弟方法。
function num(v) {
return parseInt(v, 10) || 0;
}
$.ui.plugin.add("resizable", "siblings", {
start: function() {
var element, p, co, ch, cw, width, height,
that = $(this).data("ui-resizable"),
o = that.options,
el = that.element,
oc = o.siblings,
ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0)
: oc;
if (!ce) {
return;
}
that.containerElement = $(ce);
if (/document/.test(oc) || oc === document) {
that.containerOffset = {
left: 0,
top: 0
};
that.containerPosition = {
left: 0,
top: 0
};
that.parentData = {
element: $(document),
left: 0,
top: 0,
width: $(document).width(),
height: $(document).height() || document.body.parentNode.scrollHeight
};
}
// i'm a node, so compute top, left, right, bottom
else {
element = $(ce);
p = [];
//set the padding of the container element
$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) {
p[i] = num(element.css("padding" + name));
});
//collection of sibling elements
var siblings = el.siblings();
var sHeight = 0;
siblings.each(function(){
console.log($(this).height());
var element = $("#" + this.id);
var marginHeight = parseInt(element.css("margin-top")) +
parseInt(element.css("margin-bottom"));
var borderHeight = parseInt(element.css("border-top-width")) +
parseInt(element.css("border-bottom-width"));
sHeight = sHeight + ($(this).height() + marginHeight + borderHeight);
});
that.containerOffset = element.offset();
that.containerPosition = element.position();
that.containerSize = {
height: ((element.innerHeight() - p[3]) - sHeight),
width: (element.innerWidth() - p[1])
};
co = that.containerOffset;
ch = that.containerSize.height;
cw = that.containerSize.width;
width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
that.parentData = {
element: ce,
left: co.left,
top: co.top,
width: width,
height: height
};
}
},
resize: function( event ) {
console.log("resizing");
var woset, hoset, isParent, isOffsetRelative,
that = $(this).data("ui-resizable"),
o = that.options,
co = that.containerOffset, cp = that.position,
pRatio = that._aspectRatio || event.shiftKey,
cop = {
top:0,
left:0
}, ce = that.containerElement;
if (ce[0] !== document && (/static/).test(ce.css("position"))) {
cop = co;
}
if (cp.left < (that._helper ? co.left : 0)) {
that.size.width = that.size.width + (that._helper ? (that.position.left -
co.left) : (that.position.left - cop.left));
if (pRatio) {
that.size.height = that.size.width / that.aspectRatio;
}
that.position.left = o.helper ? co.left : 0;
}
if (cp.top < (that._helper ? co.top : 0)) {
that.size.height = that.size.height + (that._helper ? (that.position.top -
co.top) : that.position.top);
if (pRatio) {
that.size.width = that.size.height * that.aspectRatio;
}
that.position.top = that._helper ? co.top : 0;
}
that.offset.left = that.parentData.left+that.position.left;
that.offset.top = that.parentData.top+that.position.top;
woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left
- cop.left)) + that.sizeDiff.width );
hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top -
co.top)) + that.sizeDiff.height );
isParent = that.containerElement.get(0) === that.element.parent().get(0);
isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
if(isParent && isOffsetRelative) {
woset -= that.parentData.left;
}
if (woset + that.size.width >= that.parentData.width) {
that.size.width = that.parentData.width - woset;
if (pRatio) {
that.size.height = that.size.width / that.aspectRatio;
}
}
if (hoset + that.size.height >= that.parentData.height) {
that.size.height = that.parentData.height - hoset;
if (pRatio) {
that.size.width = that.size.height * that.aspectRatio;
}
}
},
stop: function(){
var that = $(this).data("ui-resizable"),
o = that.options,
co = that.containerOffset,
cop = that.containerPosition,
ce = that.containerElement,
helper = $(that.helper),
ho = helper.offset(),
w = helper.outerWidth() - that.sizeDiff.width,
h = helper.outerHeight() - that.sizeDiff.height;
if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
$(this).css({
left: ho.left - cop.left - co.left,
width: w,
height: h
});
}
if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
$(this).css({
left: ho.left - cop.left - co.left,
width: w,
height: h
});
}
}
});
$(function(){
$( "#resizable1").resizable({
siblings: "parent"
});
});
最佳答案
这是我的解决方案,我将同级功能包装在一个名为 staticblock 的新小部件中。我计划进一步扩展 staticblock 小部件,但按照现在的方式,它将意识到同级元素,从而在调整元素大小时不会将同级元素推到父级之外。
function num(v) {
return parseInt(v, 10) || 0;
}
$.widget("pf.staticblock", {
_create: function() {
var ele = this.element;
this._makeResizable(ele);
},
_makeResizable: function(ele) {
ele.resizable({
siblings: "parent"
});
}
});
$.ui.plugin.add("resizable", "siblings", {
start: function() {
console.log("started");
var element, p, co, ch, cw, width, height,
that = $(this).data("ui-resizable"),
o = that.options,
el = that.element,
oc = o.siblings,
ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
if (!ce) {
return;
}
that.containerElement = $(ce);
if (/document/.test(oc) || oc === document) {
that.containerOffset = {
left: 0,
top: 0
};
that.containerPosition = {
left: 0,
top: 0
};
that.parentData = {
element: $(document),
left: 0,
top: 0,
width: $(document).width(),
height: $(document).height() || document.body.parentNode.scrollHeight
};
}
// i'm a node, so compute top, left, right, bottom
else {
element = $(ce);
p = [];
//set the padding of the container element
$([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) {
p[i] = num(element.css("padding" + name));
});
//collection of sibling elements
var siblings = el.siblings();
var sHeight = 0;
console.log(this.id);
siblings.each(function(){
console.log($(this).height());
var element = $("#" + this.id);
var marginHeight = parseInt(element.css("margin-top")) + parseInt(element.css("margin-bottom"));
var borderHeight = parseInt(element.css("border-top-width")) + parseInt(element.css("border-bottom-width"));
sHeight = sHeight + ($(this).height() + marginHeight + borderHeight);
});
that.containerOffset = element.offset();
that.containerPosition = element.position();
that.containerSize = {
height: ((element.innerHeight() - p[3]) - sHeight),
width: (element.innerWidth() - p[1])
};
co = that.containerOffset;
ch = that.containerSize.height;
cw = that.containerSize.width;
width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
that.parentData = {
element: ce,
left: co.left,
top: co.top,
width: width,
height: height
};
}
},
resize: function( event ) {
console.log("resizing");
var woset, hoset, isParent, isOffsetRelative,
that = $(this).data("ui-resizable"),
o = that.options,
co = that.containerOffset, cp = that.position,
pRatio = that._aspectRatio || event.shiftKey,
cop = {
top:0,
left:0
}, ce = that.containerElement;
if (ce[0] !== document && (/static/).test(ce.css("position"))) {
cop = co;
}
if (cp.left < (that._helper ? co.left : 0)) {
that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
if (pRatio) {
that.size.height = that.size.width / that.aspectRatio;
}
that.position.left = o.helper ? co.left : 0;
}
if (cp.top < (that._helper ? co.top : 0)) {
that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
if (pRatio) {
that.size.width = that.size.height * that.aspectRatio;
}
that.position.top = that._helper ? co.top : 0;
}
that.offset.left = that.parentData.left+that.position.left;
that.offset.top = that.parentData.top+that.position.top;
woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
isParent = that.containerElement.get(0) === that.element.parent().get(0);
isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
if(isParent && isOffsetRelative) {
woset -= that.parentData.left;
}
if (woset + that.size.width >= that.parentData.width) {
that.size.width = that.parentData.width - woset;
if (pRatio) {
that.size.height = that.size.width / that.aspectRatio;
}
}
if (hoset + that.size.height >= that.parentData.height) {
that.size.height = that.parentData.height - hoset;
if (pRatio) {
that.size.width = that.size.height * that.aspectRatio;
}
}
},
stop: function(){
var that = $(this).data("ui-resizable"),
o = that.options,
co = that.containerOffset,
cop = that.containerPosition,
ce = that.containerElement,
helper = $(that.helper),
ho = helper.offset(),
w = helper.outerWidth() - that.sizeDiff.width,
h = helper.outerHeight() - that.sizeDiff.height;
if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
$(this).css({
left: ho.left - cop.left - co.left,
width: w,
height: h
});
}
if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
$(this).css({
left: ho.left - cop.left - co.left,
width: w,
height: h
});
}
}
});
$(function(){
$( "#resizable1").staticblock({});
$( "#resizable2").staticblock({});
$( "#resizable3").staticblock({});
$( "#resizable4").staticblock({});
});
CSS:
#parent { width:600px; height: 600px; background: blue;}
#resizable1 { width: 130px; height: 131px; padding: 0em; background: yellow; }
#resizable1 h3 { text-align: center; margin: 0; }
#resizable2 { width: 85px; height: 50px; padding: 0em; background: yellow; }
#resizable2 h3 { text-align: center; margin: 0; }
#resizable3 { width: 41px; height: 70px; padding: 0em; background: yellow; }
#resizable3 h3 { text-align: center; margin: 0; }
#resizable4 { width: 11px; height: 99px; padding: 0em; background: yellow; }
#resizable4 h3 { text-align: center; margin: 0; }
HTML:
<div id="parent">
<div id="resizable1" class="ui-widget-content">
test
</div>
<div id="resizable2" class="ui-widget-content">
test
</div>
<div id="resizable3" class="ui-widget-content">
test
</div>
<div id="resizable4" class="ui-widget-content">
test
</div>
</div>
关于javascript - jQuery 覆盖包含选项,仅允许兄弟元素未使用的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464934/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!