javascript - Safari 顶部、左侧过渡问题

标签 javascript jquery html css

我已经设法使用 div 制作自定义光标。一切都适用于 chrome 和 firefox,但不适用于 Safari。我正在使用 transition 来实现效果。

在 Safari 中,它们似乎不会同时更新(当 left 的转换完成时,top 开始)

  function muisupdate(e) {
    if ($(window).width() > 991) {
      if (!e) var e = window.event;
      var mousex = e.pageX - 50;
      var mousey = e.pageY - $(window).scrollTop() - 50;
      $('.cursor').css({
        'top': mousey + 'px',
        'left': mousex + 'px'
      });
      $('body').css('cursor', 'none');
    }
  }

  $(window).mousemove(function(e) {
    muisupdate(e);
  });
.cursor {
  position: fixed;
  transform-origin: 50% 50%;
  width: 100px;
  height: 100px;
  /*border-radius: 100%;
    background:red;*/
  z-index: 99999;
  -webkit-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
  -moz-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
  -o-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
  transition: 0.5s cubic-bezier(.075, .82, .165, 1);
  transition-property: left, top;
  transition-duration: 0.5s;
  transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
  transition-delay: 0s;
  mix-blend-mode: difference;
  pointer-events: none;
}

path {
  fill: none;
  stroke: #ffffff;
  stroke-width: 3;
  stroke-linecap: round;
  stroke-linejoin: round;
  --length: 24;
  --offset: -38;
  stroke-dasharray: var(--length) var(--total-length);
  stroke-dashoffset: var(--offset);
  -webkit-transition: all .8s cubic-bezier(.645, .045, .355, 1);
  transition: all .8s cubic-bezier(.645, .045, .355, 1);
  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
  -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
  box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
}

body {
  cursor: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="cursor">
  <svg viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="5.15"></circle>
  </svg>
</div>

工作示例:Codepen

有谁知道怎么让它平滑吗?

编辑 我已经将 transition 中的 right 更改为 top 但是这 not 解决问题

最佳答案

您应该在 css 过渡属性中将 right 更改为 top:

-webkit-transition: left right 0.5s cubic-bezier(.075, .82, .165, 1);
-moz-transition: left right 0.5s cubic-bezier(.075, .82, .165, 1);
-o-transition: left right 0.5s cubic-bezier(.075, .82, .165, 1);
transition: 0.5s cubic-bezier(.075, .82, .165, 1);
transition-property: left, right;

->

-webkit-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
-moz-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
-o-transition: left top 0.5s cubic-bezier(.075, .82, .165, 1);
transition: 0.5s cubic-bezier(.075, .82, .165, 1);
transition-property: left, top;

因为您从不使用 right 属性,而是使用转换未使用的 top 。在 Safari 中,它只是运行得更快一些,而在 Chrome 中,它看起来像是被转换了(实际上并没有)

关于javascript - Safari 顶部、左侧过渡问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945781/

相关文章:

JavaScript。如何在不调用函数的情况下使用单个参数?

javascript - 如何将字符串转换为具有键值对的对象

javascript - 未定义 Uncaught ReferenceError - 使用 Angular 时添加 javascript 函数

javascript - Jquery列表拖放

html - 在显示表行时更改隐藏表行中表数据的样式

javascript - 使用 Three.js 生成正多边形

javascript - Fullcalendar eventDestroy 从未被调用

html - 背景图像顶部隐藏在浏览器书签栏下

html - 水平左对齐表单的问题

javascript - 如何在 Sharepoint 2013 博客 (Office365) 上使用 SyntaxHighlighter?