- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果使用 CSS margin:auto
命令居中,我如何获得元素位置?这是 fiddle :
https://jsfiddle.net/vaxobasilidze/jhyfgusn/1/
单击带有红色边框的元素。它应该提醒您它相对于父表的位置。 top
定位是right,但是left
是1,这是不正确的。为了解决这个问题,我可以找出 parent 的宽度,然后是红色边框元素的宽度,然后用数学方法计算出它的位置,但是有没有更好、更有效的方法来做到这一点?
$('body').on('click', '.placeHolder', function(){
alert($(this).position().left+', '+$(this).position().top);
})
.channels {
/*border-collapse: collapse;*/
border-spacing: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
font-weight: bold;
border: 1px solid rgba(30, 30, 30, 1);
border-radius: 4px;
overflow: hidden;
background: url(images/comment-bg3.png) repeat;
resize: both;
}
.channels td {
border-left: 1px solid rgba(30, 30, 30, 1);
}
.channels td:first-child {
border-left: none;
}
.channelHeader {
height: 7%;
text-align: center;
background: url(images/comment-bg2.png) repeat;
box-shadow: 0 2px 2px rgba(0,0,0,0.26);
-webkit-box-shadow: 0 2px 2px rgba(0,0,0,0.26);
-moz-box-shadow: 0 2px 2px rgba(0,0,0,0.26);
}
.audioVideo {
height: 79%;
}
.channelInfo {
height: 7%;
max-height: 7%;
text-align: center;
background: url(images/comment-bg2.png) repeat;
border-bottom: 1px solid rgba(30, 30, 30, 1);
border-top: 1px solid rgba(30, 30, 30, 1);
box-shadow: 0 2px 2px rgba(0,0,0,0.26);
-webkit-box-shadow: 0 2px 2px rgba(0,0,0,0.26);
-moz-box-shadow: 0 2px 2px rgba(0,0,0,0.26);
}
.channelInfo td {
border-radius: 2px 2px 0 0;
}
.channelInfoValues {
height: 7%;
max-height: 7%;
text-align: center;
}
.str0 {stroke:white;stroke-width:3.97;stroke-miterlimit:22.9256}
.str1 {stroke:#999999;stroke-width:3.97;stroke-miterlimit:22.9256}
.fil1 {fill:none}
.fil0 {fill:#333333}
.sound {
padding: 0;
margin: 0;
}
.audiodb {
width: 100%;
height: 100%;
position: relative;
}
.levels {
position: absolute;
width: 80%;
margin-left: 5%;
top: 5%;
height: 1px;
left: 10%;
background: silver;
z-index: 300;
}
.level1 {
top: 15%;
}
.level2 {
top: 35%;
}
.level3 {
top: 95%;
}
.audioBackground {
width: 30%;
height: 90%;
left: 20%;
position: absolute;
top: 5%;
background: #ff0000;
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjclIiBzdG9wLWNvbG9yPSIjZmYwMDAwIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMjAlIiBzdG9wLWNvbG9yPSIjZmFmZjAwIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMzglIiBzdG9wLWNvbG9yPSIjMDBmZjJhIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwNmQxMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
background: -moz-linear-gradient(top, #ff0000 0%, #ff0000 7%, #faff00 20%, #00ff2a 38%, #006d10 100%); /* FF3.6-15 */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff0000), color-stop(7%,#ff0000), color-stop(20%,#faff00), color-stop(38%,#00ff2a), color-stop(100%,#006d10)); /* Chrome4-9,Safari4-5 */
background: -webkit-linear-gradient(top, #ff0000 0%,#ff0000 7%,#faff00 20%,#00ff2a 38%,#006d10 100%); /* Chrome10-25,Safari5.1-6 */
background: -o-linear-gradient(top, #ff0000 0%,#ff0000 7%,#faff00 20%,#00ff2a 38%,#006d10 100%); /* Opera 11.10-11.50 */
background: -ms-linear-gradient(top, #ff0000 0%,#ff0000 7%,#faff00 20%,#00ff2a 38%,#006d10 100%); /* IE10 preview */
background: linear-gradient(to bottom, #ff0000 0%,#ff0000 7%,#faff00 20%,#00ff2a 38%,#006d10 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff0000', endColorstr='#006d10',GradientType=0 );
}
.audioRight {
left: 60%;
}
.audioCover {
width: 100%;
height: 30%;
background: grey;
}
.audioNumbers {
width: 10%;
height: 100%;
text-align: center;
position: absolute;
}
.db {
width: 100%;
text-align: center;
position: absolute;
left: 15%;
}
.db p {
margin-top: -5px;
}
.max {
top: 5%;
}
.high {
top: 15%;
}
.normal {
top: 35%;
}
.low {
top: 95%;
}
.placeHolder {
width: 80%;
height: 100%;
margin: auto;
border: 1px solid red;
z-index: 10;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/css-element-queries/0.4.0/ResizeSensor.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/css-element-queries/0.4.0/ElementQueries.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<table class="channels ui-draggable ui-resizable" style="width: 476px; height: 266px; position: relative;" oncontextmenu="return false;" id="mainDiv">
<tbody>
<tr class="channelHeader ui-draggable-handle">
<td colspan="5" class="channelName" id="channel1" audiopid="[0x33]" audiostream1="format:mp2,type:audio,pid:[0x33],width:0,height:0" interface="192.168.222.15" method="info" multicast="239.10.20.101" port="6000" protocol="udp" resolution="1920x1080" serviceid="1" servicename="undefined" serviceprovider="provider" videopid="[0x31]" videostream="format:h264,type:video,pid:[0x31],width:1920,height:1080">undefined</td>
<td colspan="2" class="channelNumber">1</td>
</tr>
<tr class="audioVideo">
<td colspan="5" class="vid"><div class="placeHolder"></div></td>
<td colspan="2" class="sound">
<div class="audiodb">
<div class="audioNumbers">
<span class="db max"><p>0</p></span>
<span class="db high"><p>6</p></span>
<span class="db normal"><p>18</p></span>
<span class="db low"><p>60</p></span>
</div>
<div class="audioBackground audioLeft">
<div class="audioCover"></div>
</div>
<div class="audioBackground audioRight">
<div class="audioCover"></div>
</div>
<span class="levels level0"></span>
<span class="levels level1"></span>
<span class="levels level2"></span>
<span class="levels level3"></span>
</div>
</td>
</tr>
<tr class="channelInfo">
<td class="resolution">Resolution</td>
<td class="aspect">Aspect</td>
<td class="fps">FPS</td>
<td class="vformat">V-Format</td>
<td class="aformat">A-Format</td>
<td>Left</td><td>Right</td>
</tr>
<tr class="channelInfoValues">
<td class="resolValue">1920x1080</td>
<td class="aspectValue">---</td>
<td class="fpsValue">---</td>
<td class="vformatValue">H-264</td>
<td class="aformatValue">MP2</td>
<td class="leftBarValue">---</td>
<td class="rightBarValue">---</td>
</tr>
</tbody>
</table>
最佳答案
您可以使用 .offset()
获取 .placeHolder
div 和 .vid
td 元素的位置 < em>相对于文档,然后减去它们:
$('body').on('click', '.placeHolder', function(){
var vidOffsetLeft = $('.vid').offset().left;
alert(($(this).offset().left - vidOffsetLeft) + ', ' + $(this).position().top);
});
关于javascript - 如何获取元素位置,如果它以 `margin:auto` 为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556716/
这个问题在这里已经有了答案: Range based loop: get item by value or reference to const? (5 个答案) 关闭 6 年前。 如果我有这样的类
最近,我使用 CSS grid 创建了一个布局.虽然这很好用,但我对它的工作原理感到困惑。具体来说,我对 grid-template-rows: auto auto 1fr auto; 这一行感到困惑
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why don't margin-top: auto and margin-bottom:auto work
我几乎已经尝试了所有我知道的方法,但是当我将我的 Android studio 更新到最新版本时,它仍然显示此错误。我该怎么办? gradle.build 是: buildscript { r
我想创建一个deep_flatten函数模板,该模板将生成包含range ed的元素的join。例如,如果仅考虑嵌套的std::vector,我可以拥有: template struct is_ve
我刚刚看了 Scott Meyers Universal References in C++11有一件事我不太明白。 我对作为“通用引用”的 auto 之间的区别感到有点困惑,即 auto&& 和常规
这个问题在这里已经有了答案: C++11 Range-based for-loop efficiency "const auto &i" versus "auto i" (3 个答案) 关闭 3 年
由于 auto 关键字在编译时获取类类型,我想知道使用 auto* 是否有任何效率,或者是否有任何特殊用途该表达式,因为 auto 在编译时已经获得了指针类型。 最佳答案 这个“新奇的 C++11”与
请问我是否正确,对函数返回值使用 auto&& 总是比使用 auto 更好。例如,在 auto val = someObj.getVal(); 如果 getVal() 返回引用,则 val 将是一个拷
有区别吗: template constexpr decltype(auto) f(T&& x) -> decltype(std::get(std::forward(x))) { retur
我想创建一个 deep_flatten会产生 range 的函数模板深的元素join编。例如,如果我们只考虑嵌套 std::vector s,我可以有: template struct is_vec
我在玩auto在 std::pair .在下面的代码中,函数 f应该返回 std::pair依赖于模板参数的类型。 一个工作示例: 示例 1 template auto f() { if c
我是一名 Android 开发人员,我正在尝试开发一个定制的 Android Auto 应用程序,它可以简单地镜像手机屏幕。 我知道目前 API 仅适用于音乐和消息应用程序,但我会编写一个应用程序来镜
我有一个很大的 div,里面有文字: #big-div { height: 400px; overflow: auto; } 如何才能使当新内容添加到 div(并发生溢出)时,div
我正在尝试设计一个网站,其中包含一个带有溢出的内容区域:自动和一个动态高度。最好是,我希望能够在 overflow: auto div 下方放置一个页眉和一个页脚,并让该 div 占用剩余的空间,但到
这个问题在这里已经有了答案: Does 'auto' type assignments of a pointer in c++11 require '*'? (3 个答案) 关闭 6 年前。 以下在
当使用 auto&& 处理返回左值的函数时: int func() { int v=42; return v; } auto && v = func(); 将 v 视为引用而不是左值会产生
我读了一篇关于 auto 类型推导的文章,使用 decltype 我想知道我在下面的例子中关于如何推导类型的逻辑是否正确(所以如果我是有误请指正:) #include using namespace
这个问题在这里已经有了答案: What's the semantically accurate position for the ampersand in C++ references (3 个回答)
假设我有 class Container { public: T getValue() const { return t; } const T& getCRef() const {
我是一名优秀的程序员,十分优秀!