代码之家  ›  专栏  ›  技术社区  ›  Tommy Herbert

当用户触碰iPhone上的HTML元素时,我该如何反应?

  •  5
  • Tommy Herbert  · 技术社区  · 15 年前

    我正在使用UIWebView在我的iPhone应用程序中显示一些HTML内容。我有一个图像链接,我希望当用户触摸它时它会发生变化——此时用户将一根手指放在屏幕上,而不是等到他们把手指举起来。

    什么样的CSS或JavaScript概念可以做到这一点?我看过 hover active CSS中的状态,但它们似乎不是我想要的: 悬停 与上触而非下触有关,而 积极的 似乎一点效果都没有。

    2 回复  |  直到 15 年前
        1
  •  5
  •   António Almeida Michal Drozd    9 年前

    你可以试试这个。

    我想应该是你要找的!

    http://articles.sitepoint.com/article/iphone-development-12-tips/2

    8: 触摸事件

    当然,你用iPhone的时候 用手指代替老鼠;而不是 点击,点击。更重要的是,你 可以用几个手指触摸 轻敲。在iPhone上,鼠标事件是 替换为触摸事件。他们是:

    • touchstart
    • touchend
    • touchmove
    • touchcancel (当系统取消触摸时)

    当你订阅任何一个 事件,您的事件侦听器将 接收事件对象。事件 对象有一些重要的属性, 例如:

    • touches 一组触摸对象,每个手指一个 触摸屏幕。触摸对象 例如,有pageX和pageY 包含坐标的属性 页面内的触摸。
    • targetTouches 像触摸一样工作,但只记录触摸 与 整整一页。

    下一个例子是 实现拖放。让 在空白页上放一个方框并拖动它 在附近。你要做的就是 订阅touchmove事件并 将框的位置更新为 手指四处移动,就像这样:

    window.addEventListener('load', function() {
        var b = document.getElementById('box'),  
            xbox = b.offsetWidth  / 2, // half the box width  
            ybox = b.offsetHeight / 2, // half the box height  
            bstyle = b.style; // cached access to the style object  
        b.addEventListener('touchmove', function(event) {     
            event.preventDefault(); // the default behaviour is scrolling     
            bstyle.left = event.targetTouches[0].pageX - xbox + 'px';
            bstyle.top  = event.targetTouches[0].pageY - ybox + 'px';
        }, false);  
    }, false);
    

    这个 触动 事件侦听器首先取消手指移动的默认行为,否则Safari将滚动页面。收藏 event.targetTouches 包含目标div元素上当前每个手指的数据列表。
    我们只关心一根手指,所以我们用 event.targetTouches[0] . 那么 pageX 给我们手指的X坐标。从这个值减去div宽度的一半,这样手指就保持在盒子的中心。

    希望有帮助!

        2
  •  3
  •   Jonathan Leffler    14 年前

    试试Javascript“onMouseDown”,希望mobile Safari会触发这个事件。

    <a href="#any_URL" onMouseDown="callSomeFunction();return true;">Link</a>