【问题标题】:Safari: Custom cursor changes to default on clickSafari:自定义光标在单击时更改为默认值
【发布时间】:2018-11-12 13:44:25
【问题描述】:

我有一个很奇怪的问题:

我有一个页面,上面有一些视频。当我将鼠标悬停在视频上时,光标变为自定义播放按钮。当您单击视频并开始播放时,光标会变为暂停按钮(反之亦然)。

此过程在除 Safari 之外的所有浏览器中都能完美运行。当我将鼠标悬停在视频上时会显示自定义光标,但是一旦我单击视频,自定义光标就会显示几分之一秒,然后它会变为默认光标。当我移动光标时,它再次变为自定义光标。所以问题只出在点击事件上。

这是我的代码:

jQuery:

$(document).ready(function() {
  $(".container-video").click(function(){
    ($(this)[0].paused)?$(this)[0].play():$(this)[0].pause();
    if(($(this)[0].paused))
    $(this).addClass("paused").removeClass("playing");
    else
    $(this).addClass("playing").removeClass("paused");
  });
});

CSS:

.paused {
   cursor: url(/images/play-button.cur), url(/images/play-button.cur), auto;
 }

.playing {
  cursor: url(/images/pause-button.cur), url(/images/pause-button.cur), auto;
}

有没有其他人遇到过类似的问题?这是 Safari 中的错误还是我做错了什么?

编辑: 做了一个例子的快速jsfiddle: https://jsfiddle.net/du1Lzwra/

【问题讨论】:

  • 你能做一个快速演示来运行吗?
  • 当然,抱歉!我在上面的原始帖子中添加了它

标签: jquery css browser safari cursor


【解决方案1】:

这是使其在 Safari 中工作的解决方法/解决方案。只是添加了特定时间的 settimeout 。更改它们可能会停止工作...

$(document).ready(function() {
  $(".container-video").click(function() {
    $(this)[0].paused ? $(this)[0].play() : $(this)[0].pause();
    if ($(this)[0].paused) {
      $(this).addClass("paused");
      setTimeout(() => {
        $(this).removeClass("playing");
      }, 269);
    } else {
      setTimeout(() => {
        $(this).addClass("playing");
        $(this).removeClass("paused")
      }, 481);
    }
  });
});

Demo

【讨论】:

  • 太棒了,非常感谢! settimeout 会导致光标闪烁,但至少现在它可以工作了:) Safari 中的这种行为有什么原因吗?而且我觉得奇怪的是它需要这个确切的时间,否则它会停止工作......
  • 不幸的是,我不知道是什么导致了错误。我怀疑一个错误。对于时机,我花了一些时间找到好的;)当我开始时我很幸运能接近这些,否则我会采用这个解决方案。尝试调整 10ms + 和 - 看看是否有助于闪烁
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多