解决iframe在iPad内不能滚动的问题
2014-03-14 20:10
281 查看
解决iframe在iPad内不能滚动的问题
2012-07-16 21:07:22在iPad1及iPad2里面浏览含有iframe的Web页面,会出现一个很抓狂的问题,就是iframe内引用的页面内容不能上下滑动(滚动),测试了一下其他的设备,这个问题也同样出现在了Android平台的浏览器上,大部分移动设备都存在这个问题,我估计开发商的初衷是为了方便用户浏览页面,而使iframe的宽度和高度自动匹配其内容尺寸,但是对于iframe内的touch事件却支持不完善,因此出现了iframe滑动无响应的现象。
在网上一艘,这方面的解决方法不少,但是内容和方法似乎都差不多,大多是通过给iframe内的window对象绑定事件,发生touch事件时即时改变iframe上级元素的scrollTop和scrollLeft值来实现,下面是我的实现方法:
1. HTML:
<div id="iframeBox">
<iframe src="http://blog.luozhihua.com" width="320" height="240"></iframe>
</div>
2. CSS:
#iframeBox{
border:1px solid #000;
width:400px;
height:320px;
overflow:auto;
}
#iframeBox iframe{
/* 在iPad及部分Android浏览器内下面的width、height无效 */
width:100%;
height:100%;
overflow:auto;
margin:0px; border:0px;
}
3. JavaScript:
/**
* @param iframeID iframe的id或者iframeElement[Doc Object]
* @param iframeWrapper 用于包装iframe的元素
*/
function scrollIframeForIOS(iframe, iframeWrapper)
{
if(!navigator.userAgent.match(/iPad|iPhone/i)) return false;
var touchY = 0,
touchX = 0;
iframe = typeof(iframe)=="string" ? document.getElementById(iframe) : iframe;
iframe.onload = function(){
var ifrWin = iframe.contentWindow,
ifrDoc = ifrWin.document;
// iframe的上一级节点
iframeWrapper = iframeWrapper||ifrWin.frameElement.parentNode;
// 记录手指按下的位置
ifrDoc.body.addEventListener("touchstart", function( event ){
touchX = event.targetTouches[0].pageX;
touchY = event.targetTouches[0].pageY;
});
ifrDoc.body.addEventListener("touchmove", function( event ){
e.preventDefault(); // 阻止整个页面拖动
iframeWrapper.scrollLeft += (touchX - event.targetTouches[0].pageX);
iframeWrapper.scrollTop += (touchY - event.targetTouches[0].pageY);
});
}
return true;
};
// 调用方法:body onload="scrollIframeForIOS('iframeBox');"
原文链接:http://blog.luozhihua.com/?p=1034
相关文章推荐
- 解决 iframe 在 iPad 上不能滚动的问题
- 【原】解决 iframe 在 iPad 上不能滚动的问题
- 解决kindediter中的iframe用ipad访问时无法滚动的问题
- 解决 iframe 在 iPad 上无法滚动的问题
- 解决kindediter中的iframe用ipad访问时无法滚动的问题
- 解决safari中iframe嵌入不能滚动的问题
- 解决UIScrollView 不能滚动的问题
- iframe自适应高度加载脚本,解决不能使用onload事件问题(兼容)
- 在ionic中巧用iframe解决跳转到第三方平台时不能回调的问题-比如支付
- IE下iframe第三方网页跨域不能写cookie问题的解决方法
- 今天在使用iscroll4 做一个简单触屏滚动demo,发现上下拖动的时候总是会回弹,不能看到下面的内容.这个问题苦恼了很久,终于解决
- iframe鼠标不能在子页面上滚动问题
- 解决IE浏览器中Iframe跨域访问不能读写cookie问题
- JTable放到JScrollPane里,可以上下滚动,但是不能左右滚动问题解决
- 解决session过期不能跳出iframe的问题
- 在IONIC中巧用IFRAME解决跳转到第三方平台时不能回调的问题-比如支付
- 怎样解决VC中滚动条最大滚动值不能超过32767的问题
- 解决iPad上的iframe无法触摸滚动
- 解决ios6中UIScrollView不能滚动的问题
- 解决android的ListView嵌套在ScrollView中不能被滚动的问题