微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在IFrame中的ExtJS 5应用程序滚动问题

HY,

这是我的测试页面的样子:

蓝色区域是父页面,绿色区域是运行ExtJS应用程序的IFrame(带有标签的简单视口).

如果站点在触摸设备(IPad,Android平板电脑等)上执行,则无法通过IFrame(绿色区域)上的“擦除”滚动页面.必须在蓝色区域上擦拭才能滚动页面.

这在ExtJS v4.2.1中已经正常工作(见下面的链接).

试验场:

https://skaface.leo.uberspace.de/ScrollTest/Ext510/(不按预期工作,使用ExtJS v5.1.1)
https://skaface.leo.uberspace.de/ScrollTest/Ext421/(按预期工作,相同的代码,但使用ExtJS v4.2.1)

测试代码

父网站(index.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="height: 100%;">
<head>
    <title>Test</title>
    <Meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <Meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
</head>
<body style="margin: 50px; background-color: blue;">
    <iframe src="frame.html" width="100%" height="1400" style="border: none;"></iframe>
</body>
</html>

IFrame(frame.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="height: 100%;">
<head>
    <title>Test</title>
    <Meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <Meta name="viewport" content="width=device-width,maximum-scale=1">

    <link rel="stylesheet" type="text/css" href="https://extjs.cachefly.net/ext/gpl/5.1.0/packages/ext-theme-neptune/build/resources/ext-theme-neptune-all-debug.css" />
    <script type="text/javascript" src="https://extjs.cachefly.net/ext/gpl/5.1.0/build/ext-all-debug.js"></script>

    <script type="text/javascript">
        Ext.onReady(function() {
            Ext.create('Ext.container.Viewport',{
                style: { 'background-color': 'yellowgreen' },layout: 'fit',items: [{
                    xtype: 'label',text: 'Ext version: ' + Ext.versions.extjs.version,margin: 16
                }]
            });
        });
    </script>
</head>
<body>
</body>
</html>

我真的很感激一个解决方法,因为它实际上使我的网站在移动设备上无用,即使他们已经完美的工作与ExtJS 4.2.1.

谢谢&最好的祝福

Ps:我已经发布了一个错误报告in the sencha forums,但由于我没有得到任何帮助,直到知道,我也在我的运气在stackoverflow …

解决方法

行为很奇怪,我在使用niceScroll插件之前已经看过它了,而且许多其他的插件也和iframe有一样的问题,反正 this workaround

我使用Hammer.js jQuery插件来检测您的iframe上的触摸手势,如果您发现任何有关敏感性的问题(因为我不知道你正在寻找什么约束),您可以调整在他们的回购中找到的hammer.js选项(如pan阈值,指针..etc)

代码很简单:

<body id="mainbody"  style="margin: 50px; background-color: blue;">
    <iframe id="myframe"  src="frame.html" width="100%" height="1400" style="border: none;"></iframe>
</body>
<script>
var myBody
$('iframe').load(function(){
  myBody=$(this).contents().find("body");
  myBody.css({"height":"100%","overflow":"hidden"}).hammer({threshold:1}).bind("pan",myPanHandler);
});
function myPanHandler(ev)
{
    $("#mainbody").scrollTop($("#mainbody").scrollTop()-ev.gesture.deltaY)
console.log(($("#mainbody").scrollTop()-ev.gesture.deltaY*0.5)+".."+$("#mainbody").scrollTop())
}
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高