如何使用JavaScript禁用CSS转换,更新样式,然后快速恢复转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JavaScript禁用CSS转换,更新样式,然后快速恢复转换相关的知识,希望对你有一定的参考价值。
我正在构建一个CSS和javascript时钟,它使用transform: rotate(xdeg)
旋转时钟指针。 CSS transition
属性用于平滑每个手的旋转并模拟真实的时钟。手是divs绝对定位在top: 50%
和left: 50%
开始,并在指向12点时旋转-90度。
所以秒针的完整周期是每秒增加6度,从-90度到264度,然后再回到-90度。问题是,当从264度到-90度(59秒到0秒)时,应用于手的过渡使得手在时钟周围向后移动。
我已经尝试检查秒针何时达到59秒(transform: rotate(264deg)
),通过在元素上设置no-transition
类暂时禁用转换,将transform
属性更改为rotate(-96deg
)这与rotate(264deg)
的外观相同,然后删除no-transition
类。这应该平滑过渡,因为旋转从-96deg变为-90度。见下面的代码。
JavaScript的:
const secondsHand = document.querySelector('.seconds-hand');
function setTime(){
const now = new Date();
const seconds = now.getSeconds();
let secondsDegrees = ((seconds / 60) * 360) - 90;
secondsHand.style.transform = `rotate(${secondsDegrees}deg)`;
if(seconds === 59){
secondsDegrees = -96;
secondsHand.classList.add('no-transition');
secondsHand.style.transform = `rotate(${secondsDegrees})`;
secondsHand.classList.remove('no-transition');
}
// Code to handle other hands of the clock goes here
}
CSS:
.no-transition {
transition: none !important;
}
不幸的是,这不起作用。这是问题的代码:https://codepen.io/tillytoby/pen/axRByw
查看您的代码,我可以看到您添加了一个类“无转换”,然后将其删除。应该像'n'秒之前那样去除。您可以使用setInterval实现此目的。校验:
if(seconds === 59){
secondsDegrees = -96;
secondsHand.classList.add('no-transition');
secondsHand.style.transform = `rotate(${secondsDegrees}deg)`;
//1000 is the delay, in this case 1000 miliseconds.
setTimeout( function () {secondsHand.classList.remove('no-transition');},1000)
}
以上是关于如何使用JavaScript禁用CSS转换,更新样式,然后快速恢复转换的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript css 或 html attr 禁用 iOS 链接预览
如何在 ASP.NET MVC 4 Beta 中禁用 Javascript/CSS 缩小
我可以通过 JavaScript 禁用 CSS :hover 效果吗?
从 HTML、CSS、JS 转换为 JSX、CSS、JS 时,如何在 react 中链接我的 javascript 文件?
如何使用 Html css Javascript 将 localhost 网站项目转换为 Android Web 应用程序