【问题标题】:CSS3 Rotation transition causing intermittent mouse click detectionCSS3旋转过渡导致间歇性鼠标点击检测
【发布时间】:2013-03-06 22:50:44
【问题描述】:

这是一个与CSS3 Rotate on animated element causing click event not to invoke非常相似的问题

虽然我的问题有点不同,但不能评论它以添加支持信息。

检查我的沙盒:http://jsfiddle.net/5bsG3/2/

在鼠标悬停时,我在围绕 Y 轴旋转的链接中有一个跨度。并不总是检测到单击事件(用于 jQuery 或仅用于链接导航)。尝试单击链接的填充区域(就在文本之外,但在链接上)。几乎就好像命中检测存在问题,因为跨度在旋转,因此在鼠标没有点击跨度的角度。即使鼠标仍然点击 LINK 的填充区域。 70-110 度左右的角度似乎是个问题。

上述帖子中提出的解决方案实际上并未解决此问题。另外,我的问题可能有点不同,因为我的旋转是作为 CSS 转换而不是 JS 间隔触发器处理的。

有什么想法吗?有没有人见过这个?我知道这是一种低俗的链接方式,但对于目标网站来说,这是可以接受的数量。

请随意简化 jsfiddle,我从简单开始并添加了一些调试信息以帮助识别问题。

html:

<ul>
  <li><a href="" class="flip-link"><span>Click this link</span></a></li>
  <li id="LinkCounter">LinkClicked</li>
  <li>&nbsp</li>
  <li id="SpanCounter">SpanClicked</li>
<ul>

css:

ul li
{
    display: inline;
    float: left ;
}

.flip-link
{
    float:left ;
}

span
{
    float:left ;
}


.flip-link {
    display: block;
    overflow: hidden;

    height: 20px;
    padding: 5px 50px 7px 50px ;
    margin-right: 10px ;

    background: #AAA;

    -webkit-perspective: 50px;
       -moz-perspective: 50px;
        -ms-perspective: 50px;
            perspective: 50px;

    -webkit-perspective-origin: 50% 50%;
       -moz-perspective-origin: 50% 50%;
        -ms-perspective-origin: 50% 50%;
            perspective-origin: 50% 50%;
}

.flip-link span {
    display: block;
    position: relative;

    background: #EEE;

    padding: 0px 10px ;

    -webkit-transition: all 1000ms ease;
       -moz-transition: all 1000ms ease;
        -ms-transition: all 1000ms ease;
            transition: all 1000ms ease;

    -webkit-transform-origin: 50% 0%;
       -moz-transform-origin: 50% 0%;
        -ms-transform-origin: 50% 0%;
            transform-origin: 50% 0%;

    -webkit-transform-style: preserve-3d;
       -moz-transform-style: preserve-3d;
        -ms-transform-style: preserve-3d;
            transform-style: preserve-3d;

}
    .flip-link:hover span
    {
        -webkit-transform: translate3d( 0px, 0px, 0px ) rotateY( 360deg );
           -moz-transform: translate3d( 0px, 0px, 0px ) rotateY( 360deg );
            -ms-transform: translate3d( 0px, 0px, 0px ) rotateY( 360deg );
                transform: translate3d( 0px, 0px, 0px ) rotateY( 360deg );

        color: #55FF55 ;
    }

JS:

var linkClickCount = 0 ;
var spanClickCount = 0 ;

$(document).ready(function () {
    $('.flip-link').click(function () {
            linkClickCount++ ;            
            $("#LinkCounter").text(linkClickCount);

            return (false);
    });

    $('.flip-link span').click(function () {
            spanClickCount++ ;            
            $("#SpanCounter").text(spanClickCount);
    });
});

【问题讨论】:

  • 我忘了提到如果跨度没有转换,鼠标点击可以正常工作。如果我设置了静态角度,您可以点击链接的填充区域(而不是文本),它仍然会检测到点击。但是,如果文本在旋转,大约 70-110 度,它始终不会捕捉到点击。
  • 商品在轮播时是否需要注册点击?这很关键吗?
  • 是的,因为它是一个链接,我需要用户能够在不等待旋转完成的情况下单击该链接。如果他们在旋转过程中单击并且单击不起作用,那么自然的假设是该链接根本不可单击。但好问题,请在此处查看实时(但不是非常公开)项目:www.trickspoke.com 对于这个实时站点,转换非常快,最大限度地减少了问题 - 即使它仍然存在。
  • 我应该补充一点,您可以看出这不是一个基本的命中测试问题,因为您可以看到鼠标在单击时位于旋转范围的一部分上。只是不知何故没有检测到点击。即使您将其用作标准

标签: html css onclick css-transitions css-transforms


【解决方案1】:

问题。由于使用 CSS 存在浏览器差异,甚至浏览器之间存在差异,因此使用纯 CSS 解决方案会有问题。您还必须意识到 CSS 实际上会在您的 div 处于动画中间时折叠它们。我们的愿景实际上并没有发生什么,它实际上将 div 大小折叠为 0,这意味着当您单击时,您将无法“实际单击它。下面显示您应该将绝对定位的 div 作为叠加层并处理单击即使是从一个清晰、不可见的 div 中仍然会产生您实际点击链接的错觉。

<a id="link"></a>

 $("#link").click(function(){

spanClickCount++;
$("#SpanCounter").text(spanClickCount);

}

【讨论】:

  • 嗯...我不认为我在关注你。什么与跨度重叠?我已经摆弄了 jsfiddle 沙箱并删除了 标记,实际上只是简单地删除了 CSS 中引用跨度的地方,我们得到了基本的旋转。然而,点击更糟糕,几乎无法正常工作。也许我在转换它时错过了一些东西。另外,我的问题是 .click() 事件根本没有在某些特定角度触发。我希望我可以设置 window.location 但代码不知道何时...:/
  • 我从来没有说过要删除 只需给你的锚点一个 id 并将点击处理程序应用于锚点。我在你的 js fiddle 中试过它,即使在旋转时它也能工作
  • 我已经更新了 jsfiddle:jsfiddle.net/5bsG3/4,但对于与以前相同的角度,它仍然失败。 :( 在给定的角度范围内,导致无法检测到这些鼠标点击的任何原因都非常一致。为了测试,我特别尝试在链接旋转大约 90 度时单击(第一次文本旋转时是平​​的面向您的一侧)。我知道这似乎是一个角落案例,但是当您在真实网页上看到它时,它就变得很重要了。
  • 它适用于我的各个角度,所以我不确定你给定的问题是什么?另外,你为什么不直接使用 javascript window.location.href="http:///dfd" 到 div 的外部。
  • 您使用的是哪个浏览器?我正在 Chrome (25.0) 和 Firefox (19.0.2) 中进行测试。我无法设置 window.location.href 因为我无法感知何时单击鼠标(在特定角度)。我想如果你能看到问题,你会发现它不起作用。 :( 如果它对你有用,我真的很想了解为什么它对我不起作用!
【解决方案2】:

一个被旋转以显示其背面的元素不会在背面获得点击,除非您特别强制背面可见。

在你的跨度上使用这个:

-webkit-backface-visibility: visible;
   -moz-backface-visibility: visible;
    -ms-backface-visibility: visible;
     -o-backface-visibility: visible;

见:http://jsfiddle.net/5bsG3/8/

【讨论】:

  • AFAIK,backface-visibility 默认为visible。所以这不应该改变任何事情。
  • 我不小心将我的背面可见性设置为隐藏,所以这帮助我找到了我的问题。谢谢!
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 2023-04-10
  • 2014-07-27
  • 2020-04-18
  • 1970-01-01
  • 2021-09-06
  • 2015-08-03
相关资源
最近更新 更多