Jay*_*yer 6 javascript android drag-and-drop
我有一个WebView在assets文件夹中显示本地HTML页面.这WebView是一个更大的布局的一部分Activity.我正在尝试允许用户将文本从EditText窗口小部件拖动到窗口中的输入元素WebView.除了将拖动侦听器接收的屏幕坐标转换为使用的屏幕坐标外,一切都很好document.elementFromPoint.他们不匹配.它会继续将文本放入输入框中,这些输入框比用户手指更低.任何帮助,将不胜感激.警告:我的javascript知识非常可怜.
基本流程:
在我的活动中:
private class OnWebViewDragListener implements OnDragListener {
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
String dropText = event.getClipData().getItemAt(0).getText().toString();
mJavaScript._dropText(mWebView, dropText, event.getX(), event.getY());
return true;
default:
break;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
Javascript包装器:
public void _dropText(WebView wv, String text, float x, float y) {
wv.loadUrl("javascript:dropText('" + text + "', " + x + ", " + y + ")");
}
Run Code Online (Sandbox Code Playgroud)
Javascript功能:
<script type="text/javascript">
function dropText(text, x, y) {
var elem = document.elementFromPoint(x, y);
if (elem.tagName == "INPUT") {
elem.value = text;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
Jay*_*yer 10
弄清楚了.是否使转换变得更加复杂.Android的WebView和WebPage都有自己的基于可见视图端口大小的坐标系.是的,都报告不同大小的视图端口.即使两个视图端口都可以滚动,也不需要包含那些滚动的更改.简单的公式:
DE = DragEvent
WV = WebView
x = DE.getX()*(window.innerWidth/WV.getWidth());
y = DE.getY()*(window.innerHeight/WV.getHeight());
我的代码现在看起来如何:
在活动中:
private class OnWebViewDragListener implements OnDragListener {
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
String dropText = event.getClipData().getItemAt(0).getText().toString();
mJavaScript._dropText(mWebView, dropText, event.getX(), event.getY());
return true;
default:
break;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
Javascript包装器:
public void _dropText(WebView wv, String text, float x, float y) {
wv.loadUrl("javascript:dropText('" + text + "', " + x + ", " + y + ", " + wv.getHeight()
+ ", " + wv.getWidth() + ")");
}
Run Code Online (Sandbox Code Playgroud)
Javascript功能:
<script type="text/javascript">
function dropText(text, x, y, height, width) {
x *= (window.innerWidth / width);
y *= (window.innerHeight / height);
var elem = document.elementFromPoint(x, y);
if (elem.tagName == "INPUT") {
elem.value = text;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |