Maison interface Web tutoriel HTML css3-手把手 transform 小时钟_html/css_WEB-ITnose

css3-手把手 transform 小时钟_html/css_WEB-ITnose

Jun 24, 2016 am 11:48 AM

学习css3ing,正在学习transfomr,突发奇想用此做个小时钟,开始吧:

  1. 准备前期工作,把时钟的表盘,时分秒针,实时时间标签 的大概样子做好,效果如图:

html代码如下:

<div class="main"> <div id="timeLabel"></div> <div id="hour"></div> <div id="minute"></div> <div id="second"></div> </div>
Copier après la connexion

css 代码如下:

 1  <style>  2  * {  3  margin: 0;  4  padding: 0;  5 }  6  .main {  7  position: relative;  8  margin: 100px auto;  9  width: 300px; 10  height: 300px; 11  border-radius: 300px; 12  border: 1px solid #000; 13  box-shadow:2px 5px; 14 } 15  #timeLabel { 16  position: absolute; 17  background-color:pink; 18  width:100px; 19  height:30px; 20  left:100px; 21  top:180px; 22 } 23 24  #hour { 25  width: 100px; 26  height: 10px; 27  background-color: red; 28  position:absolute; 29  left:150px; 30  top:145px; 31 } 32  #minute { 33  width:120px; 34  height:8px; 35  background-color:blue; 36  position:absolute; 37  left:150px; 38  top:146px; 39 } 40  #second { 41  width: 140px; 42  height: 4px; 43  background-color: green; 44  position: absolute; 45  left: 150px; 46  top: 148px; 47 } 48  </style>
Copier après la connexion

  2. 初始化默认时间,和表盘刻度 ,效果如下:

更改后的css代码:

 <style>        * {            margin: 0;            padding: 0;        }        .main {            position: relative;            margin: 100px auto;            width: 300px;            height: 300px;            border-radius: 300px;            border: 1px solid #000;            box-shadow: 2px 5px #808080;        }        #timeLabel {            position: absolute;            background-color: pink;            width: 80px;            height: 25px;            left: 110px;            top: 180px;            color: #fff;            line-height: 25px;            text-align: center;        }        #hour {            width: 100px;            height: 10px;            background-color: red;            position: absolute;            left: 150px;            top: 145px;            transform-origin: 0 50%;        }        #minute {            width: 120px;            height: 8px;            background-color: blue;            position: absolute;            left: 150px;            top: 146px;            transform-origin: 0 50%;        }        #second {            width: 140px;            height: 4px;            background-color: green;            position: absolute;            left: 150px;            top: 148px;            transform-origin: 0 50%;        }        .hourPointer, .minuterPointer, .secondPointer {            position: absolute;            transform-origin: 0 50%;        }        .hourPointer {            height: 10px;            width: 12px;            left: 150px;            top: 145px;            background-color: #f00;            z-index:3;        }        .minuterPointer {            height: 8px;            width: 10px;            left: 150px;            top: 146px;            background-color: #b6ff00;            z-index: 2;        }        .secondPointer {            height: 6px;            width: 8px;            left: 150px;            top: 147px;            background-color: #fa8;            z-index: 1;        }    </style>
Copier après la connexion

初始化 js代码:

window.onload = function () {            initClock();                  }        var timer = null;        function $(id) {            return document.getElementById(id)        }        function CreateKeDu(pElement, className, deg, translateWidth) {            var Pointer = document.createElement("div");            Pointer.className = className            Pointer.style.transform = "rotate(" + deg + "deg)   translate(" + translateWidth + "px)";            pElement.appendChild(Pointer);        }        function initClock() {            var main = $("biaopan");            var timeLabel = $("timeLabel");            var hour = $("hour");            var minute = $("minute");            var second = $("second");            var now = new Date();            var nowHour = now.getHours();            var nowMinute = now.getMinutes();            var nowSecond = now.getSeconds();            //初始化timeLabel            timeLabel.innerHTML = nowHour + ":" + nowMinute + ":" + nowSecond;            //初始化表盘            for (var index = 0; index < 4; index++) {                CreateKeDu(main, "hourPointer", index * 90, 138);            }            for (var index = 0; index < 12; index++) {                CreateKeDu(main, "minuterPointer",index*30, 140);            }            for (var index = 0; index < 60; index++) {                CreateKeDu(main, "secondPointer", index * 6, 142);            }            //初始化时分秒针            second.style.transform = "rotate(" + (nowSecond * 6 - 90) + "deg)";            minute.style.transform = "rotate(" + (nowMinute * 6 + 1 / 10 * nowSecond - 90) + "deg)";            hour.style.transform = "rotate(" + (nowHour * 30 + 1 / 2 * nowMinute + 1 / 120 * nowSecond - 90) + "deg)";        }
Copier après la connexion

3.添加定时器:

js代码如下:

 //定时器        function startMove() {            clearInterval(timer);            timer = setInterval(function () {                var now = new Date();                var nowSecond = now.getSeconds();                var nowMinute = now.getMinutes();                var nowHour = now.getHours();                second.style.transform = "rotate(" + (nowSecond * 6 - 90) + "deg)";                minute.style.transform = "rotate(" + (nowMinute * 6 + 1 / 10 * nowSecond - 90) + "deg)";                hour.style.transform = "rotate(" + (nowHour * 30 + 1 / 2 * nowMinute + 1 / 120 * nowSecond - 90) + "deg)";                timeLabel.innerHTML = nowHour + ":" + nowMinute + ":" + nowSecond;            }, 1000);        }
Copier après la connexion

  4.使用OOP方式更改:

修改后的js代码如下:

function Clock() {            //定义属性            this.main = this.$("biaopan");            this.timeLabel = this.$("timeLabel");            this.hour = this.$("hour");            this.minute = this.$("minute");            this.second = this.$("second");            this.nowHour = null;            this.nowMinute = null;            this.nowSecond = null;            this.timer = null;            var _this = this;            //初始化函数            var init = function () {                _this.getNowTime();                _this.initClock();                _this.InterVal();            }            init();        }        Clock.prototype.$ = function (id) {            return document.getElementById(id)        }        Clock.prototype.CreateKeDu = function (className, deg, translateWidth) {            var Pointer = document.createElement("div");            Pointer.className = className            Pointer.style.transform = "rotate(" + deg + "deg)   translate(" + translateWidth + "px)";            this.main.appendChild(Pointer);        }        Clock.prototype.getNowTime = function () {            var now = new Date();            this.nowHour = now.getHours();            this.nowMinute = now.getMinutes();            this.nowSecond = now.getSeconds();        }        Clock.prototype.setPosition = function () {            this.second.style.transform = "rotate(" + (this.nowSecond * 6 - 90) + "deg)";            this.minute.style.transform = "rotate(" + (this.nowMinute * 6 + 1 / 10 * this.nowSecond - 90) + "deg)";            this.hour.style.transform = "rotate(" + (this.nowHour * 30 + 1 / 2 * this.nowMinute + 1 / 120 * this.nowSecond - 90) + "deg)";        }        Clock.prototype.initClock = function () {            //初始化timeLabel            this.timeLabel.innerHTML = this.nowHour + ":" + this.nowMinute + ":" + this.nowSecond;            //初始化表盘            for (var index = 0; index < 4; index++) {                this.CreateKeDu("hourPointer", index * 90, 138);            }            for (var index = 0; index < 12; index++) {                this.CreateKeDu("minuterPointer", index * 30, 140);            }            for (var index = 0; index < 60; index++) {                this.CreateKeDu("secondPointer", index * 6, 142);            }            this.setPosition();        }        Clock.prototype.InterVal = function () {            clearInterval(this.timer);            var _this = this;            this.timer = setInterval(function () {                _this.getNowTime();                _this.second.style.transform = "rotate(" + (_this.nowSecond * 6 - 90) + "deg)";                _this.minute.style.transform = "rotate(" + (_this.nowMinute * 6 + 1 / 10 * _this.nowSecond - 90) + "deg)";                _this.hour.style.transform = "rotate(" + (_this.nowHour * 30 + 1 / 2 * _this.nowMinute + 1 / 120 * _this.nowSecond - 90) + "deg)";                _this.timeLabel.innerHTML = _this.nowHour + ":" + _this.nowMinute + ":" + _this.nowSecond;            }, 1000);        }
Copier après la connexion

  

最后调用如下:

window.onload = function () {            new Clock();        }
Copier après la connexion

最终页面代码:

                <script>        function Clock() {            //定义属性            this.main = this.$(&quot;biaopan&quot;);            this.timeLabel = this.$(&quot;timeLabel&quot;);            this.hour = this.$(&quot;hour&quot;);            this.minute = this.$(&quot;minute&quot;);            this.second = this.$(&quot;second&quot;);            this.nowHour = null;            this.nowMinute = null;            this.nowSecond = null;            this.timer = null;            var _this = this;            //初始化函数            var init = function () {                _this.getNowTime();                _this.initClock();                _this.InterVal();            }            init();        }        Clock.prototype.$ = function (id) {            return document.getElementById(id)        }        Clock.prototype.CreateKeDu = function (className, deg, translateWidth) {            var Pointer = document.createElement(&quot;div&quot;);            Pointer.className = className            Pointer.style.transform = &quot;rotate(&quot; + deg + &quot;deg)   translate(&quot; + translateWidth + &quot;px)&quot;;            this.main.appendChild(Pointer);        }        Clock.prototype.getNowTime = function () {            var now = new Date();            this.nowHour = now.getHours();            this.nowMinute = now.getMinutes();            this.nowSecond = now.getSeconds();        }        Clock.prototype.setPosition = function () {            this.second.style.transform = &quot;rotate(&quot; + (this.nowSecond * 6 - 90) + &quot;deg)&quot;;            this.minute.style.transform = &quot;rotate(&quot; + (this.nowMinute * 6 + 1 / 10 * this.nowSecond - 90) + &quot;deg)&quot;;            this.hour.style.transform = &quot;rotate(&quot; + (this.nowHour * 30 + 1 / 2 * this.nowMinute + 1 / 120 * this.nowSecond - 90) + &quot;deg)&quot;;        }        Clock.prototype.initClock = function () {            //初始化timeLabel            this.timeLabel.innerHTML = this.nowHour + &quot;:&quot; + this.nowMinute + &quot;:&quot; + this.nowSecond;            //初始化表盘            for (var index = 0; index &lt; 4; index++) {                this.CreateKeDu(&quot;hourPointer&quot;, index * 90, 138);            }            for (var index = 0; index &lt; 12; index++) {                this.CreateKeDu(&quot;minuterPointer&quot;, index * 30, 140);            }            for (var index = 0; index &lt; 60; index++) {                this.CreateKeDu(&quot;secondPointer&quot;, index * 6, 142);            }            this.setPosition();        }        Clock.prototype.InterVal = function () {            clearInterval(this.timer);            var _this = this;            this.timer = setInterval(function () {                _this.getNowTime();                _this.second.style.transform = &quot;rotate(&quot; + (_this.nowSecond * 6 - 90) + &quot;deg)&quot;;                _this.minute.style.transform = &quot;rotate(&quot; + (_this.nowMinute * 6 + 1 / 10 * _this.nowSecond - 90) + &quot;deg)&quot;;                _this.hour.style.transform = &quot;rotate(&quot; + (_this.nowHour * 30 + 1 / 2 * _this.nowMinute + 1 / 120 * _this.nowSecond - 90) + &quot;deg)&quot;;                _this.timeLabel.innerHTML = _this.nowHour + &quot;:&quot; + _this.nowMinute + &quot;:&quot; + _this.nowSecond;            }, 1000);        }        window.onload = function () {            new Clock();        }    </script>    
Copier après la connexion


 总结:本例中使用了css3 的transform属性中的 rotate的旋转效果和translate的位移效果,关于transform的使用 请参考  http://www.w3school.com.cn/cssref/pr_transform.asp

 

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le but du & lt; Progress & gt; élément? Quel est le but du & lt; Progress & gt; élément? Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

Quel est le but du & lt; datalist & gt; élément? Quel est le but du & lt; datalist & gt; élément? Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Mar 17, 2025 pm 12:20 PM

L'article examine les meilleures pratiques pour assurer la compatibilité des navigateurs de HTML5, en se concentrant sur la détection des fonctionnalités, l'amélioration progressive et les méthodes de test.

Quel est le but du & lt; mètre & gt; élément? Quel est le but du & lt; mètre & gt; élément? Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Mar 17, 2025 pm 12:27 PM

L'article discute de l'utilisation des attributs de validation de formulaire HTML5 comme les limites requises, motifs, min, max et longueurs pour valider la saisie de l'utilisateur directement dans le navigateur.

Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Mar 20, 2025 pm 05:56 PM

L'article traite de la balise Meta de la fenêtre, essentielle pour la conception Web réactive sur les appareils mobiles. Il explique comment une utilisation appropriée garantit une mise à l'échelle optimale du contenu et une interaction utilisateur, tandis que la mauvaise utilisation peut entraîner des problèmes de conception et d'accessibilité.

Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Mar 20, 2025 pm 06:05 PM

L'article traite du & lt; iframe & gt; L'objectif de Tag dans l'intégration du contenu externe dans les pages Web, ses utilisations courantes, ses risques de sécurité et ses alternatives telles que les balises d'objet et les API.

Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Apr 04, 2025 pm 11:54 PM

GiteEpages STATIQUE Le déploiement du site Web a échoué: 404 Dépannage des erreurs et résolution lors de l'utilisation de Gitee ...

See all articles