- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制作一个将文本框覆盖在图像上的用户脚本:它使用固定位置使用 interactjs 的可拖动菜单。菜单有一个按钮,我需要它来创建一个 20px*60px 的 div 并将其显示在屏幕 View 的中心(这样就不会滚动到页面底部并从那里拖动它)。我可以(有点)通过使用来做到这一点:
var div = document.getElementById("inserted_div_2");
div.style.position = 'fixed';
div.style.top = '50%'; //relative to screen
div.style.left = '50%';
从那里我可以将它拖动/调整到我想要在图像上的位置(也使用 interactjs)但是然后,我怎样才能将它更改为 position:absolute 以便它随着内容滚动而在图像上保持相同的位置(例如: 在 img2) 的左上角?像这样的东西:
var posX = div.getPosX(); //relative to page; in %, px or em
var posY = div.getPosY();
// when I change it from fixed to absolute the div goes back to the bottom of the page
div.style.position = 'absolute';
div.style.left = posX;
div.style.top = posY;
HTML 结构看起来像这样:
<body>
...
<div id="content">
...
<img src="/img1.jpg"> // size and number of imgs is variable.
<img src="/img2.jpg"> // are in a strip format.
<img src="/img3.jpg">
...
</div>
...
<div id="overlays">
//eg: div1 was dragged from the center of screen
//into in between img1 and img2
<div id="inserted_div_1">Text</div>
//now I need to do the same for div2,
//dragging it to the top left corner of img2
<div id="inserted_div_2">Text</div>
</div>
</body>
我宁愿不使用 jQuery 或其他库,但如果它太难,那么我会使用它。谢谢!
最佳答案
您可以使用 offsetTop
和 offsetLeft
获取元素相对于页面的位置(以像素为单位)。
var posX = div.offsetLeft;
var posY = div.offsetTop;
div.style.position = 'absolute';
div.style.left = posX;
div.style.top = posY;
更新
offsetTop
和 offsetLeft
返回的值不包括应用的 transform:translate
样式。我创建了一个 test case - 它不可拖动,但它向您展示了如何通过添加 offset
和 translate
值来计算相对位置:
var div = document.getElementById("inserted_div_2");
var content = document.getElementById("content");
function testpos(){
var ol = div.offsetLeft,
ot = div.offsetTop,
cs = window.getComputedStyle(div, null),
tr = cs.getPropertyValue("-webkit-transform") ||
cs.getPropertyValue("-moz-transform") ||
cs.getPropertyValue("-ms-transform") ||
cs.getPropertyValue("-o-transform") ||
cs.getPropertyValue("transform") ||
false;
//outputs something like 'matrix(1, 0, 0, 1, 80, 90)'
var values = tr.replace(/[^0-9\.\,]/g,'').split(','),//split into array
tx = values[4] || 0,//take the x value (else 0)
ty = values[5] || 0;//take the y value (else 0)
//
content.innerHTML+=("<hr />position: "+div.style.position+"<br />");
content.innerHTML+=("offsetLeft:"+ol+", offsetTop:"+ot+"<br />");
content.innerHTML+=("translate-x:"+tx+", translate-y:"+ty+"<br />");
//so the actual position is the offset + the translate ==
var x = parseInt(ol) + parseInt(tx),
y = parseInt(ot) + parseInt(ty);
content.innerHTML+=("x:"+x+" y:"+y+"<br />");
}
/* TEST */
//1 set to fixed
div.style.position = 'fixed';
testpos();//test position
//2 move using transfor:translate
div.style.transform = 'translate(80px,90px)';
testpos();//test position (note the offset does not include the transform)
/3 set to absolute and get the position
div.style.position = 'absolute';
testpos();
关于javascript - 中心 div(位置 :absolute) vertically and horizontally to screen view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697522/
一个屏幕上有多个横向的Recyclerview。我想在第一个水平 Recyclerview 的第一个项目上执行 espresso click 事件。请告诉我如何实现它。 onView(withId(
我目前正在为一个网站开发移动样式表,但我遇到了一个我无法解释的奇怪问题: 即使我的样式表中不再有“宽度”定义,Android 浏览器会在右侧留下大量空白区域,导致出现滚动条。 我不知道是什么原因导致的
我有一个由 graphviz 工具制作的无向图(现在我正在使用 sfdp ): digraph structs { node [shape=Mrecord, URL="index_ne
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 8年前关闭。 Improve thi
假设我有一行单元格,其中包含以下值: B2: "banana" C2: "orange" D2: "apple" 我把这个范围变成一个二维数组。我的主要代码在Word文档中: dim MySheet
我正在创建一个基于位置的提醒,EKReminder。 对于坐标,我使用 CLGeocoder 将地址转换为 CLLocation。 就提醒本身而言,我认为有两个因素决定了提醒将触发的“区域”(半径/圆
我有一个问题可以用一个很像 SO 的系统来模拟:帖子和标签。要获得我的帖子,我可能会这样做: SELECT title, body, author FROM posts WHERE id = ? 然后
我希望将结果生成到水平联合中。我能够组合在一起并生成结果。但是,我需要以预期结果格式显示结果。 SQL (SELECT kpa_id AS 'KPA', SUM(weightage) AS '
我正在研究 CMS 模板,并尝试找出这是否可行。我在网上找不到任何东西,也许我只是使用了错误的关键字。 给出这个模型: http://img833.imageshack.us/img833/4979/
我有一个 LTR 方向的 Bootstrap v4.0.0 模板,我想将整个模板更改为 RTL 方向,我使用了以下这些方法: body { direction:rtl; } html { dire
嗯,几秒钟前还好,但现在当我指向“水平”时,它总是说“水平无法解析或不是一个字段”。我已经删除了旧项目并创建了一个新项目,但仍然遇到这个问题。有人能告诉我发生了什么事吗?谢谢。我正在使用 eclips
我正在寻找一种仅在 html 表格 View 中水平或垂直滚动同时保持始终可见的标题和行的方法。最好我想要类似于 this 的东西但在没有 ember 或 coffeescript 的纯 Java
每当我需要定位某些东西使其垂直和/或水平时,我通常会求助于 flexbox,如果那不是解决方案,我会使用 position: absolute 和 top:50%; 和/或 left:50%; 与 t
我想创建一个从右向左滚动然后从左侧消失并再次从右侧重新出现的 TextView。我可以使用动画??谢谢 最佳答案 我相信您希望您的 TextView 成为选取框。如果是这样,我就是这样做的: 在 XM
我只需要在屏幕上平行放置两个按钮(每个按钮的宽度为 50dp)。第一个应该有 margin left 10dp 并且放置没问题。 但是第二个按钮应该放置在屏幕中,并在中间(水平)向左留出 30dp 的
新的Bootstrap 三个文档explains the grid behaviour作为超小型设备的“始终水平”。这是什么意思?在小型设备上,所有列肯定会垂直堆叠在一起吗?在这里让我失望的是我(缺乏
我需要一些帮助来隐藏我的水平滚动条并仍然能够滚动。我使用过 webkit,但在 IE 和 firefox 中不起作用。我看到很多关于垂直滚动条的帮助,但不适用于水平滚动条。有帮助吗? 更新:我创建了一
为什么不支持水平滚动?
在 examples page当您搜索(CTRL+F)图片库并单击第一张图片时,您可以使用下一个/上一个箭头浏览此图片库。它们之间的动画是垂直的——图像垂直飞行。如何让它们水平飞行? 在我找到的帮助中
我在移动网站上使用 Owl Carousel。 当用户水平滚动然后停止时,内容立即停止移动(或停止后不久)。 是否可以添加一些惯性? 我尝试了文档中公开的不同选项,例如 smartSpeed , fl
我是一名优秀的程序员,十分优秀!