- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 UIWebView
中,当我长按它时,我需要访问 DOM 元素的属性(从 SVG 图形)。为此,我添加了一个 UILongPressGestureRecognizer
,如下所示:
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action: @selector(longPress:)];
[self.webView addGestureRecognizer: longPress];
当我在 View 上长按时,会调用处理程序,我从中调用一个 JS 函数:
- (void) longPress: (UIGestureRecognizer *) gesture {
CGPoint curCoords = [gesture locationInView:self.webView];
if (!CGPointEqualToPoint(curCoords, self.lastLongPress)) {
self.lastLongPress = curCoords;
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"longPress(%f, %f)", curCoords.x, curCoords.y]];
}
}
这是我的 JS 处理程序:
function longPress(x, y) {
x = x + window.pageXOffset;
y = y + window.pageYOffset;
var element = svgDocument.elementFromPoint(x, y);
alert(element.localName + ' ' + x + ' ' + y + ' ' + window.innerWidth + ' ' + window.innerHeight);
}
但是,UIWebView
坐标似乎是 != 来自 DOM 坐标(我单击的位置与警报中显示的 localName 不对应)。我设法弄清楚 UIWebView
坐标和 JS 坐标之间有 +/- 1.4 的系数(通过单击屏幕右下角并将这些值与 进行比较window.innder{Width,Height}
.
我的猜测是 UIWebView
最初可能会应用默认缩放比例,但我找不到该值对应的值。
此外,我还需要一种方法来在用户实际缩放/移动页面时使这项工作正常进行。
有人知道我做错了什么吗?
谢谢,
最佳答案
好吧,我终于找到问题所在了。
它来自缩放比例,这是我设法修复它的方法:
- (void) longPress: (UIGestureRecognizer *) gesture {
int displayWidth = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.innerWidth"] intValue];
CGFloat scale = self.webView.frame.size.width / displayWidth;
CGPoint curCoords = [gesture locationInView:self.webView];
curCoords.x /= scale;
curCoords.y /= scale;
if (!CGPointEqualToPoint(curCoords, self.lastLongPress)) {
self.lastLongPress = curCoords;
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"longPress(%f, %f)", curCoords.x, curCoords.y]];
}
}
和 JS 处理程序:
function longPress(x, y) {
var e = svgDocument.elementFromPoint(x, y);
alert('Youhouu ' + e.localName);
}
似乎不需要添加 pageOffset,因为现在 UIWebView
会自动添加它(我相信来自 iOS 5)。
干杯,
关于javascript - UIWebView、缩放和 elementFromPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14330633/
我正在使用 jquery/javascript 开发这个拖放应用程序,我必须平衡两者来完成我想要的。 var drop = document.elementFromPoint($(this).offs
问题是我试图通过使用 jquery 使用元素的位置来获取元素的 id,并且我只找到了 document.elementFromPoint() 方法,但是此方法通过元素相对于文档的位置来获取元素。 我想
在开始使用以下函数处理项目之前,我正在尝试检查以确保该项目可见 isVisible: function (node, doc, x, y) { var el = doc.elementFrom
我需要一些使用 elementFromPoint 的帮助,如何检索 div 的类? id 给出了年份,tagName 给出了 div。有没有人可以上课? 谢谢 最佳答案 捕获元素,看看它的 clas
我在一个项目中使用 document.elementFromPoint,它看起来很慢。 100,000 次迭代需要 7051 毫秒。 document.getElementsByTagName("*"
在 UIWebView 中,当我长按它时,我需要访问 DOM 元素的属性(从 SVG 图形)。为此,我添加了一个 UILongPressGestureRecognizer,如下所示: UILongPr
我有一种情况,其中有两层元素使用相对和绝对定位定位在另一层之上: 我使用顶层(第 1 层)触发 mousemove 事件,以便在其他层上创建交互 - 当鼠标移动到第 1
我有一个 SVG包含多个 PATH 的 map 对象。该 map 上有一个叠加图像,所以每当我想在 map 上调用某个事件时,我必须使用 elementFromPoint .我的函数的结构有点像这样:
我有一个 javascript 小书签,我把它放在一起,让一项艰巨的任务变得更容易忍受。本质上,我正在浏览数百页的培训 Material ,并确保所有内容都已从 Helvetica 正确转换为 Ari
我正在做一个测试项目。我正在尝试使用 document.elementFromPoint(x, y) 来获取用于测试的元素。但是,我有一个用例,我不希望使用 elementFromPoint 找到某些
有没有办法从函数 elementFromPoint(x, y) 返回的元素/对象中检索子元素; 假设我有如下语句, var elem = document.elementFromPoint(x, y)
有没有像 document.elementFromPoint Javascript 方法一样返回最靠近窗口中指定点的元素的 jQuery 方法? 最佳答案 如果您打算使用 vanilla JS 函数,
我有坐标。我想检查这些坐标处是否存在具有特定类的元素。我该怎么做? 我尝试了以下代码(这是一个jsfiddle:https://jsfiddle.net/0o160f5g/2/): HTML: CS
我需要从 UIWebView 中选择一些文本。我引用了这个答案Getting selected elements programatically from uiwebview?但是当我使用点击它选择文
UIWebView 在其私有(private) UIBrowserView 上有一个“假 header ”,即 webView.scrollView.subviews[0]。当我使用 js 时elem
在 document.elementFromPoint 的文档中它指出: Returns the element from the document whose elementFromPoint me
我使用以下代码来获取所选文本的位置: var text = window.getSelection(); start = text.anchorOffset; end = text.focusOffs
对于我的网站,我希望用户能够点击各种 svg 元素。 我编写了一个快速函数,让用户可以点击封闭的形状。我基本上只是在它们上运行 document.elementFromPoint(x, y)。这适用于
According to this answer ,我应该能够获取元素“放置”发生的元素。然而,它报告的结果非常奇怪和随机,这些结果似乎总是父元素,而不是拖动元素放置在其上的实际子元素。 Here's
我正在尝试创建一个 jQuery 脚本来查找所需元素在给定坐标处是否可见(未对其他元素隐藏)。 为了这个目标,我尝试使用 document.elementFromPoint 函数,但它似乎不起作用(请
我是一名优秀的程序员,十分优秀!