jQuery和CSS3精美翻页式电子时钟特效

简介: jQuery和CSS3精美翻页式电子时钟特效

这是一款jQuery和CSS3精美翻页式电子时钟特效。该电子时钟使用CSS3渐变和transform来制作翻页电子时钟的外观,然后通过jquery代码来驱动电子时钟的翻页显示时间效果。

tx000238.png

在线预览 下载

使用方法
在页面中引入jquery和style.css文件。

<script src="path/to/jquery.min.js"></script>
<link rel="stylesheet" href="css/style.css">

HTML结构
该翻页式电子时钟的HTML结构如下。

<main>
  <div style="display:none">
    <div id="top-test-anim" class="num-anim top-anim" style="display:none;">
      <div class="top-half-num">2</div>
    </div>
    <div id="bottom-test-anim" class="num-anim bottom-anim" style="display:none;">
      <div class="bottom-half-num">
        <div class="dropper">3</div></div>
    </div>
  </div>
  <canvas id="my-canvas"></canvas>
  <div id="clock">
    <div class="time-container hours">
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="hour-tens-top">1</span>
        <span class="num bottom" id="hour-tens-bottom">
          <div class="bottom-container">1</div></span>
          <div class="swapper">
            <div id="top-hour-tens-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">8</div>
            </div>
            <div id="bottom-hour-tens-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">9</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="hour-ones-top">3</span>
        <span class="num bottom" id="hour-ones-bottom">
          <div class="bottom-container">3</div></span>
          <div class="swapper">
            <div id="top-hour-ones-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">8</div>
            </div>
            <div id="bottom-hour-ones-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">9</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
    </div>
    <div class="time-container minutes">
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="minute-tens-top">4</span>
        <span class="num bottom" id="minute-tens-bottom">
          <div class="bottom-container">4</div></span>
          <div class="swapper">
            <div id="top-minute-tens-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">8</div>
            </div>
            <div id="bottom-minute-tens-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">9</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="minute-ones-top">3</span>
        <span class="num bottom" id="minute-ones-bottom">
          <div class="bottom-container">3</div></span>
          <div class="swapper">
            <div id="top-minute-ones-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">8</div>
            </div>
            <div id="bottom-minute-ones-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">9</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
    </div>
    <div class="time-container seconds">
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="second-tens-top">5</span>
        <span class="num bottom" id="second-tens-bottom">
          <div class="bottom-container">5</div></span>
          <div class="swapper">
            <div id="top-second-tens-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">8</div>
            </div>
            <div id="bottom-second-tens-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">9</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
      <div class="digit">
        <div class="fade"> </div>
        <span class="num top" id="second-ones-top">3</span>
        <span class="num bottom" id="second-ones-bottom">
          <div class="bottom-container">2</div></span>
          <div class="swapper">
            <div id="top-second-ones-anim" class="num-anim top-anim" style="display:none;">
              <div class="top-half-num">2</div>
            </div>
            <div id="bottom-second-ones-anim" class="num-anim bottom-anim" style="display:none;">
              <div class="bottom-half-num">
                <div class="dropper">3</div></div>
            </div>
        </div>
        <div class="ring ring-left"></div>
        <div class="ring ring-right"></div>
      </div>
    </div>
  </div>
</main>

初始化插件
在页面DOM元素加载完毕,通过下面的方法来驱动电子时钟的翻页显示时间效果。

var CHANCE_SPEC, x, y;

CHANCE_SPEC = 60;
x = 0;
y = 0;

function rand(min, max) {
   
  return Math.floor(Math.random() * (max - min + 1) - min);
}

function drawSpec(data, x, y, w) {
   
    var index;

    index = (x + y * w) * 4;

    data.data[index + 0] = 0;
    data.data[index + 1] = 0;
    data.data[index + 2] = 0;
    data.data[index + 3] = 30;
}

function drawPattern(canvas, ctx, data) {
   
  var w, h;
  w = canvas.width;
  h = canvas.height;
  while (x < w) {
   
    if (rand(1, 100) < CHANCE_SPEC) {
   
      drawSpec(data, x, y, w);
    }
    x++;
  }
  if (x === w) {
   
    x = 0;
    y++;
  }
  if (y === h) {
     
    ctx.putImageData(data, 0, 0);
    return;
  }
  drawPattern(canvas, ctx, data);
}

function main() {
   
  var canvas, ctx, data;

  console.log('starting1');
  canvas = document.getElementById('my-canvas');
  ctx = canvas.getContext('2d');
  data = ctx.getImageData(0, 0, canvas.width, canvas.height);
  drawPattern(canvas, ctx, data);
  updateTime();
}

function updateTime() {
   
  var currentTime, seconds, minutes, hours, times, i;
  currentTime = new Date();
  times = {
   
    'second': currentTime.getSeconds(),
    'minute': currentTime.getMinutes(),
    'hour': currentTime.getHours()
  };
  for (type in times) {
   
    if (times.hasOwnProperty(type)) {
   
      setTimes(type, timeToString(times[type]));
    }
  }
  setTimeout(updateTime, 1000);
}

function timeToString(currentTime) {
   
  var t;
  t = currentTime.toString();
  if (t.length === 1) {
   
    return '0' + t;
  }
  return t;
}

function getPreviousTime(type) {
   
  return $('#' + type + '-top').text();
}

function setTimes(type, timeStr) {
   
  setTime(getPreviousTime(type + '-tens'), 
    timeStr[0], type + '-tens');
  setTime(getPreviousTime(type + '-ones'),
    timeStr[1], type + '-ones');
}

function setTime(previousTime, newTime, type) {
   
  if (previousTime === newTime) {
   
    return;
  }
  setTimeout(function() {
   
    $('#' + type + '-top').text(newTime);
  }, 150);
  setTimeout(function() {
   
  $('.bottom-container',
    $('#' + type + '-bottom')).text(newTime);
  }, 365);
  animateTime(previousTime, newTime, type);
}

function animateTime(previousTime, newTime, type) {
   
  var top, bottom;
  top = $('#top-' + type + '-anim');
  bottom = $('#bottom-' + type + '-anim');
  $('.top-half-num', top).text(previousTime);
  $('.dropper', bottom).text(newTime);
  top.show();
  bottom.show();
  $('#top-' + type + '-anim').css('visibility', 'visible');
  $('#bottom-' + type + '-anim').css('visibility', 'visible');
  animateNumSwap(type);
  setTimeout(function() {
   
    hideNumSwap(type);
  }, 365);
}

function animateNumSwap(type) {
   
  $('#top-' + type + '-anim').toggleClass('up');
  $('#bottom-' + type + '-anim').toggleClass('down');
}

function hideNumSwap(type) {
   
  $('#top-' + type + '-anim').toggleClass('up');
  $('#bottom-' + type + '-anim').toggleClass('down');
  $('#top-' + type + '-anim').css('visibility', 'hidden');
  $('#bottom-' + type + '-anim').css('visibility', 'hidden');
}

$(document).ready(main);


window.requestAnimFrame = (function(callback){
    
    return window.requestAnimationFrame || 
        window.webkitRequestAnimationFrame || 
        window.mozRequestAnimationFrame || 
        window.oRequestAnimationFrame || 
        window.msRequestAnimationFrame || 
        function(callback){
    window.setTimeout(callback, 1000 / 60); }
})();
相关文章
|
10天前
jQuery+CSS3实现404背景游戏动画源码
jQuery+CSS3实现404背景游戏动画源码
42 22
|
18天前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
89 24
|
30天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
63 21
|
27天前
|
JavaScript 容器
jquery和CSS3图片排序过滤搜索插件
Filterizr是一款jquery和CSS3图片排序过滤插件。它可以对一组图片进行排序,按条件过滤和按关键字搜索。并在显示结果时使用指定的CSS3动画过渡效果。
26 2
|
27天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
5月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果
|
2月前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
85 7
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
53 6
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
60 5