Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CSS和jQuery模拟时钟-平滑动画

CSS和jQuery模拟时钟-平滑动画
EN

Stack Overflow用户
提问于 2014-05-24 16:29:44
回答 3查看 4.9K关注 0票数 2

我的CSS3/jQuery模拟时钟出了点小问题。

时钟指针所走的每一步,都是非常困难的。相反,我希望移动/动画是平滑的。我已经试过使用transition: all .1s了,但是当时钟指针到达顶端时,它就会乱七八糟。

我正在使用transform: rotate()来旋转每只手。每移动一次,它就旋转6度。

也许解决方案可能是,不是仅仅旋转指针,每秒钟、每分钟和每小时旋转6度,秒针每1/6秒旋转1度,分针每10秒旋转一次,时针每10分钟旋转一次。我认为它可以创建一个更流畅的手动画,但我不知道怎么做。

这是我的JavaScript代码:

代码语言:javascript
运行
AI代码解释
复制
$(function() {

      setInterval( function() {
      var seconds = new Date().getSeconds();
      var sdegree = seconds * 6;
      var srotate = "rotate(" + sdegree + "deg)";

      $("#sec").css({ "transform": srotate });

      }, 1000 );

      setInterval( function() {
      var hours = new Date().getHours();
      var mins = new Date().getMinutes();
      var hdegree = hours * 30 + (mins / 2);
      var hrotate = "rotate(" + hdegree + "deg)";

      $("#hour").css({ "transform": hrotate});

      }, 1000 );

      setInterval( function() {
      var mins = new Date().getMinutes();
      var mdegree = mins * 6;
      var mrotate = "rotate(" + mdegree + "deg)";

      $("#min").css({"transform" : mrotate });

      }, 1000 );

});

jsFiddle Demo

希望你能理解这个问题,并能帮助我:)

EN

回答 3

Stack Overflow用户

发布于 2014-05-24 17:17:42

为手设置线性过渡:

代码语言:javascript
运行
AI代码解释
复制
#clock div {
    -moz-transition: all 1s linear;
    -webkit-transition: all 1s linear;
    -o-transition: all 1s linear;
    transition: all 1s linear;
}

为了避免指针倒转到零的奇怪行为,您应该将JS更改为在毫秒内工作。这样,旋转值(度数)只会一直递增。CSS旋转可以做到这一点:

代码语言:javascript
运行
AI代码解释
复制
$(function() { 
     var i=0;
    setInterval( function() {
        //get time since midnight in milliseconds
         var now = new Date(),
        then = new Date(
        now.getFullYear(),
        now.getMonth(),
        now.getDate(),
        0,0,0),
        mil = now.getTime() - then.getTime(); // difference in milliseconds

          var h = (mil/(1000*60*60));
          var m = (h*60);
          var s = (m*60);
          //console.log(h+":"+m+":"+s);   


      var sdegree = (s * 6);
      var srotate = "rotate(" + sdegree + "deg)";  
      $("#sec").css({ "transform": srotate });

      var hdegree = h * 30 + (h / 2);
      var hrotate = "rotate(" + hdegree + "deg)";
      $("#hour").css({ "transform": hrotate});

      var mdegree = m * 6;
      var mrotate = "rotate(" + mdegree + "deg)";      
      $("#min").css({ "transform" : mrotate });

         if(i>0){
             $("#clock").addClass("transform");       
         }
         i++;

      }, 1000 );

});

http://jsfiddle.net/FHNJf/10/

更新:

这里有一个纯粹的JS解决方案,用于平滑地扫手。它使用requestAnimationFrame对循环进行计时,因为它不使用CSS转换,所以当你将焦点返回到浏览器选项卡时,它不会出现指针必须“赶上”的奇怪行为。

代码语言:javascript
运行
AI代码解释
复制
//use requestAnimationFrame for smoothness (shimmed with setTimeout fallback)
window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          function( callback ){
              window.setTimeout(callback, 1000 / 60);
          };
})();

//initialize the clock in a self-invoking function
(function clock(){ 
    var hour = document.getElementById("hour"),
        min = document.getElementById("min"),
        sec = document.getElementById("sec");
    //set up a loop
    (function loop(){
        requestAnimFrame(loop);
        draw();
    })();
    //position the hands
    function draw(){
        var now = new Date(),//now
            then = new Date(now.getFullYear(),now.getMonth(),now.getDate(),0,0,0),//midnight
            diffInMil = (now.getTime() - then.getTime()),// difference in milliseconds
            h = (diffInMil/(1000*60*60)),//hours
            m = (h*60),//minutes
            s = (m*60);//seconds
        //rotate the hands accordingly
        sec.style.webkitTransform = "rotate(" + (s * 6) + "deg)";
        hour.style.webkitTransform = "rotate(" + (h * 30 + (h / 2)) + "deg)";
        min.style.webkitTransform = "rotate(" + (m * 6) + "deg)";
    } 
})();

http://jsfiddle.net/FHNJf/13/

票数 3
EN

Stack Overflow用户

发布于 2014-05-24 16:37:46

您只需在hand元素上指定过渡持续时间。试试这个:

代码语言:javascript
运行
AI代码解释
复制
#clock div {
    -webkit-transition-duration: 1.0s;
    -moz-transition-duration: 1.0s;
    -o-transition-duration: 1.0s;
    transition-duration: 1.0s;
}
票数 0
EN

Stack Overflow用户

发布于 2014-05-24 16:37:54

你想让第二只手(和其他所有手)平稳地移动吗?尝试将以下css添加到#sec div:

代码语言:javascript
运行
AI代码解释
复制
[prefix-]transition: all 1.00s linear 0.0s;

这只会让你走到那里的一部分,你必须聪明地告诉转换如何旋转,因为它可能会导致12c时钟标记附近的bug。

不管它有什么价值,你可能有一个单独的setInterval(...),它创建一个单独的new Date()并相应地更新指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23847310

复制
相关文章
❤️使用 HTML、CSS 和 JavaScript 的简单模拟时钟❤️
正如你在上图中所看到的,这里我借助 HTML、CSS 和 JavaScript 制作了一个简单的模拟时钟。早些时候我制作了更多类型的模拟和数字手表。如果你愿意,你可以看看这些设计。
海拥
2021/08/23
2.7K0
❤️使用 HTML、CSS 和 JavaScript 的简单模拟时钟❤️
使用 Html、CSS 和 Javascript 的简单模拟时钟
在本文中,我将向您展示如何使用 HTML CSS 和 JavaScript代码制作模拟时钟。我已经设计了很多类型的模拟时钟。这款手表采用深色仿形设计的形状。就像典型的模拟风筝一样,有三个指针来指示小时、分钟和秒。在这里,我使用了符号而不是 1 到 12 的数字。
小狐狸说事
2023/01/11
2.4K0
使用 Html、CSS 和 Javascript 的简单模拟时钟
利用 CSS3 动画绘画动态时钟
什么是动画?这是我们应该先了解的问题。按照百度百科的解释动画是采用逐帧拍摄对象并连续播放而形成运动的影像技术。不论拍摄对象是什么,只要它的拍摄方式是采用的逐格方式,观看时连续播放形成了活动影像,它就是动画。放在 CSS3 中大致可以理解为使元素从一种样式逐渐变为另一种样式,即将多个过渡效果放在一起形成的效果。CSS3 动画是通过 "关键帧",来控制动画的每一步。这里又有一个问题,什么是关键帧?我理解为定义动画执行的时间点和在该时间点上的样式是什么。 通过 CSS3 动画绘制动态时钟的步骤 定义页面布局和样式
杨逸轩
2018/06/14
1.6K0
使用 HTML、CSS 和 JavaScript 制作模拟时钟(初学者教程)
在本文中,您将学习如何使用 HTML、CSS 和 JavaScript 编程代码制作模拟时钟。在这里我将向您展示如何制作一个简单的模拟时钟。
海拥
2021/08/23
5.6K0
使用 HTML、CSS 和 JavaScript 制作模拟时钟(初学者教程)
jQuery平滑翻页
在网页设计中,平滑翻页效果可以为用户提供流畅的页面过渡和良好的用户体验。使用jQuery可以很方便地实现平滑翻页效果。
堕落飞鸟
2023/05/18
1.4K0
jquery 事件和动画
blur focus load resize scroll unload click dbclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error
用户5760343
2019/10/08
2.2K0
jquery 事件和动画
用jQuery 动画函数 animate 模拟豌豆发射
先上图。 Paste_Image.png 动态效果: pea.gif 豌豆射手,草坪还有子弹都是现成的图片,本文主要讲解jQuery的animate函数的基本用法。 1. jQuery是库还是框架?
剽悍一小兔
2018/05/17
1.4K0
模拟谷歌今日使用的css动画
  不知道大家有没有注意到谷歌今天官网上的logo,刚开始一看还以为是gif,在仔细一看,发现并非如此,原来是使用CSS Sprite技术,利用一个初始图片和一张画满各个动作的拼接图片,从而实现了动画效果。
胡尐睿丶
2022/03/23
5940
模拟谷歌今日使用的css动画
发明专利公开 -- CSS动画精准实现时钟
上一篇【setTimeout不准时,CSS精准实现计时器功能】的博文,最后提到了通过 CSS 动画实现计时器的方式。
奋飛
2023/05/13
9750
发明专利公开 -- CSS动画精准实现时钟
js动画和css3动画_js控制css动画
Web动画的本质是元素状态改变造成的样式变更,CSS动画和JS动画的区别并不是由语言来决定的,而是由两者的特点和适用场景来判断的。
全栈程序员站长
2022/11/19
12.5K0
CSS 3.0实现模拟手机加载动画
给大家分享一个用CSS 3.0实现的模拟手机信各异的加载动画,效果如下: 以下是代码实现,欢迎大家复制、粘贴和收藏。 <!DOCTYPE html> <html lang="en"> <h
越陌度阡
2020/11/26
8980
CSS 3.0实现模拟手机加载动画
js 和 css动画
使用setTimeout()或者setInterval()使用这两个函数定时调用一段代码。这是其原理。
mySoul
2018/08/11
8.6K0
时钟模拟(继承)
定义循环计算器继承计数器类,增加私有数据成员:最小值min_value,max_value,
叶茂林
2023/07/30
1880
jQuery(事件和动画-事件绑定移除、动画)
①params:一组包含作为动画属性和终值的样式属性和及其值的集合(动画的目标样式);
全栈开发日记
2022/05/12
2.4K0
jQuery 编程 | jQuery 动画
jQuery提供了一些列的动画基本方法,同时也提供了自定动画方案.animate()。
闻说社
2022/08/10
6.3K0
jQuery 动画
jQuery动画相关方法概况 方法 说明 实例 hide()和show() 隐藏和显示 HTML 元素。 $("#hide").click(function(){    
静默虚空
2018/01/05
2.9K0
JavaScript 动画_jquery 动画
回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数,这个过程叫做回调。
全栈程序员站长
2022/11/04
2.4K0
模拟实现jQuery的$().on()和$().trigger()
前言: 仅仅是简单模拟了$().on()和$().trigger(),仅支持id选择器,事件冒泡与事件委托。
进击的小进进
2019/09/05
5650
模拟实现jQuery的$().on()和$().trigger()
锋利的JQuery —— 事件和动画
大图猛戳
用户1154259
2018/01/17
6580
锋利的JQuery —— 事件和动画
CSS旋转动画和动画的拼接
linear是匀速运动,还可以设置为: ease 默认。动画以低速开始,然后加快,在结束前变慢。 ease-in 动画以低速开始。 测试 ease-out 动画以低速结束。 测试 ease-in-out 动画以低速开始和结束。 测试 cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。 infinite是无限次播放的意思,这里也可以写个数字,来控制播放几次;
liulun
2019/09/29
1.6K0

相似问题

Tkinter动画-模拟模拟时钟

121

jQuery动画()平滑

112

平滑jQuery动画

11

Jquery/CSS -动画打开div盒容器平滑

10

CSS平滑文本动画

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档