【问题标题】:CSS3 radial gradient rendering in Google ChromeGoogle Chrome 中的 CSS3 径向渐变渲染
【发布时间】:2014-12-14 01:37:10
【问题描述】:

当我突然注意到一些奇怪的事情时,我正在使用 jQuery 为径向渐变设置动画(查看 this JSFiddle)。当鼠标指针移动到元素的左侧时,位置动画是平滑的,但是当鼠标指针移动到右边时,它根本不平滑(如果你移动鼠标足够慢,请注意位置的跳跃)。

这感觉像是某种舍入错误,但我不确定它为什么会发生。有任何想法吗?我暂时只在谷歌浏览器上测试过,只发生在水平方向。

CSS

html { background: #fff; }
html, body {
    width: 100%;
    height: 100%;
}

body { background: #000; }

JavaScript

$('body').on('mousemove', function(event) {
    var x = event.pageX;
    var y = event.pageY;

    $(this).css('background', '-webkit-radial-gradient(' + x + 'px ' + y + 'px, transparent 10%, #000 5%)');
});

你能复制这个还是只发生在我身上?

编辑:在 Safari 中运行良好。

【问题讨论】:

  • 我无法复制它。你用的是什么版本?当您将鼠标向右移动很远时,您的鼠标是否会越过滚动条(因为那时mousemove 事件不会触发)?
  • 我想我正在使用最新的非 beta 版本(无法检查 atm)并且我没有悬停滚动条。元素越大效果越明显,鼠标越往右移动。
  • 在 Windows 8 上的 Chrome 中发生在我身上
  • 如果有帮助,请使用版本 38.0.2125.104。

标签: javascript jquery html css google-chrome


【解决方案1】:

我可以复制它:就像this answer 中所说的那样,它并不顺利,因为它仅依赖于 mousemove 事件。尝试使用自动收报机,它依赖于时间间隔。我修改了你的小提琴以使用在已经链接的线程中找到的代码,这里是:http://jsfiddle.net/rh4Ljro4/

这里是相关的javascript:

var container = $('body');
var contWidth = container.width();

var intervalId;
var mouseX, mouseY;

//this function is called 60 times per second.
function ticker(){
     $(container).css('background', '-webkit-radial-gradient(' + mouseX + 'px ' + mouseY + 'px, transparent 10%, #000 5%)');
}

//this interval calls the ticker function every 16 milliseconds
intervalId = setInterval(ticker, 16); //33 millisecond is about 30 fps while 16 would be roughly 60fps

container.mousemove(function(e){
    mouseX = e.offsetX; //store the current mouse position so we can reference it during the interval
    mouseY = e.offsetY;
});

【讨论】:

  • 这和原来的问题完全一样
  • 好吧,很抱歉,它为我解决了这个问题。它仅在边框附近有一些问题,但那是因为鼠标可能会越过滚动条。这解决了减少容器的宽度末端高度,至少对我来说:jsfiddle.net/ufs8yL0b
  • 我也一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多