如果你在iframe内部触摸屏幕,是否仍然可以继续滚动网页?这个问题只会在iOS设备上出现,并且我找不到任何解决方法!
我的当前页面中间包含一个宽度为95%,高约500像素的iframe,因此当我到达iframe时,无法再滚动(除非我非常靠近两侧触摸)。
谢谢
如果你在iframe内部触摸屏幕,是否仍然可以继续滚动网页?这个问题只会在iOS设备上出现,并且我找不到任何解决方法!
我的当前页面中间包含一个宽度为95%,高约500像素的iframe,因此当我到达iframe时,无法再滚动(除非我非常靠近两侧触摸)。
谢谢
HTML模板:
<div style="position: relative;">
<div
style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; opacity: 0;"
ng-click="$ctrl.handleOverlayClick($event)"
></div>
</div>
...
constructor ($document, $element) {
this.iframe = $document[0].createElement('iframe');
this.iframe.width = '100%';
this.iframe.height = '100';
this.iframe.sandbox = 'allow-same-origin allow-scripts allow-popups allow-forms allow-top-navigation';
const element = $element[0].children.item(0);
element.appendChild(this.iframe);
this.contentDocument = this.iframe.contentDocument;
}
handleOverlayClick ($event) {
// Overlay element is an invisible layer on top of the iframe. We use this to
// capture scroll events which would be in the iframe (which don't work properly on iPad Safari)
// When a click is detected, we propigate that through to the iframe so the user can click on links
const rect = $event.target.getBoundingClientRect();
const x = $event.clientX - rect.left; // x position within the iframe
const y = $event.clientY - rect.top; // y position within the iframe
// triggering click on underlaying element
const clickedElement = this.contentDocument.elementFromPoint(x, y);
clickedElement && clickedElement.click();
}
html, body {
overflow: hidden
}
如果您无法访问iframe的HTML(因为可能iframe正在加载第三方内容),您可以在iframe周围添加包装器div并以这种方式禁用滚动。将以下内容添加到父页面HTML中:
<div style="overflow: hidden"><iframe src="example.com"></iframe></div>
您可以将以下内容添加到父页面HTML CSS中,以使浏览器使用动量,以便最终滚动超过iframe底部,然后滚动页面:
*{
-webkit-overflow-scrolling: touch
}
为iframe添加传统的“scrolling”属性,以防止iframe尝试滚动:
<iframe src="example.com" scrolling="no"></iframe>