【问题标题】:Is there a way to get a cross platform overflow:scroll有没有办法获得跨平台溢出:滚动
【发布时间】:2011-09-17 20:35:25
【问题描述】:

目前,我正在开发一个旨在同时在移动设备和普通计算机上运行的网站。我面临的问题是由于我需要有一个固定位置的页眉和页脚。

我尝试的第一件事是使用 position:fixed,这对我来说似乎是最自然的。它在我的 PC 上运行良好,但在我的 iphone(使用 ios4)上却无法运行。所以我用谷歌搜索了一下,找到了 iScroll。 iScroll 是一个 JavaScript 独立脚本,旨在解决这个确切的问题。问题是这个解决方案破坏了非移动平台上的功能。我还查看了 YUI ScrollView,但它在非移动平台上又被破坏了。

目前我仅在检测到移动浏览器时才使用 iScroll 解决了这个问题。但我正在寻找更清洁、更好的解决方案。

注意:iScroll4不支持ie,我也想支持。

【问题讨论】:

  • 暂时坚持浏览器检测
  • 您可能想要一个完全不同的移动浏览器样式表,TBH。

标签: javascript html css mobile web


【解决方案1】:

不幸的是,没有干净的解决方案 - 您可以尝试检测“触摸事件”,因为这些事件几乎可以让您知道用户何时需要 iScroll,然后启动它。

检测触摸事件的简单方法如下,

    var $q = something...;
    try {
        document.createEvent("TouchEvent");
        $q.onmousedown = 'ontouchstart',
        $q.onmouseup = 'ontouchend',
        $q.onmousemove = 'ontouchmove';
        $q.touches = true; //used in other modules as well

        //position based on first-finger position
        $q.getPageX = function(e){
            return e.touches[0].pageX;
        };
        $q.getPageY = function(e){
            return e.touches[0].pageY;
        };

} catch (e) {
        //KEY BASED DEVICE
        $q.onmousedown = 'onmousedown',
        $q.onmouseup = 'onmouseup',
        $q.onmousemove = 'onmousemove';
        $q.touches = false;

        //grabbing the position based on Mouse position
        $q.getPageX = function(e){
            return e.clientX;
        };
        $q.getPageY = function(e){
            return e.clientY;
        };
 }

【讨论】:

  • 你觉得这种方式比基于http请求中的user agent字段检测好?如果是,为什么?
  • 因为现在,唯一支持触摸事件的浏览器已经非常先进,可以支持 iScroll 使用的 css3 转换。这些浏览器是,opera mobile、mobile safari、android 默认浏览器、fennec fox。如果假设明天发布了支持这些功能的新浏览器,您将不得不再添加一个案例,而通过这种检测,它就可以正常工作。此外,公司选择添加对功能的支持——当 IE9 发布时(最终对 JS 的支持有点好),许多脚本和网站“崩溃”了,因为他们在 IE9 上“强制”使用与在 IE8 上使用的相同的 hack。
  • 别误会,用户代理检测非常棒,但在新版本的浏览器中添加新功能时应谨慎使用 - 增加了破坏未来兼容性的风险。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2013-02-25
  • 2011-03-13
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多