受控时钟

受控时钟

受控时钟免费下载 在 HTML、CSS 和 JavaScript 中

HTML:

 <!-- svg making up the clock -->  
 <svg viewBox="0 0 100 100" width="100" height="100">  
 <defs>  
 <!-- filters describing the shadows, applied on the larger and smaller shapes -->  
 <filter id="shadow-large">  
 <feDropShadow dx="0" dy="0" stdDeviation="4"/>  
 </filter>  
 <filter id="shadow-small">  
 <feDropShadow dx="0" dy="0" stdDeviation="0.2"/>  
 </filter> <!-- mask used to cut out a sliver of the overlaid circle -->  
 <mask  
 id="掩码">  
 <g transform="translate(50 50)">  
 <!-- starting at -15, incrementing by 30 for each hour -->  
 <g  
 类=“小时”转换=“旋转(-15)”>  
 <circle  
 cx="0"  
 cy="0"  
 r="50"  
 填充="#fff">  
 </circle>  
 <path  
 d="M 0 -50 v 50 l 28.86 -50"  
 填充="#000">  
 </path>  
 </g>  
 </g>  
 </mask>  
 </defs> <!-- circle making up the bottom of the clock -->  
 <circle  
 cx="50"  
 cy="50"  
 r="46"  
 填充="#303335">  
 </circle> <!-- circle with the accent color, overlaid before the text elements -->  
 <circle  
 cx="50"  
 cy="50"  
 r="42"  
 填充="#EA3F3F"  
 filter="url(#shadow-large)">  
 </circle> <!-- text elements, positioned from the center around the clock -->  
 <g  
 类=“时钟--面”  
 字体大小="8px"  
 变换=“翻译(50 50)”  
 文本锚=“中间”  
 主导基线=“中间”>  
 <!-- the elements are included through the script, at intervals of 30 degrees -->  
 <!--  
 <text  
 变换=“旋转(-90)平移(35 0)旋转(90)”>  
 12  
 </text> <text  
 变换=“旋转(-0)平移(35 0)旋转(0)”>  
 03  
 </text>  
 -->  
 </g> <!-- circle overlaid on the accent circle and text elements -->  
 <circle  
 掩码=“网址(#掩码)”  
 cx="50"  
 cy="50"  
 r="50"  
 填充="#303335">  
 </circle> <!-- smaller circle on which the hands sit -->  
 <circle  
 cx="50"  
 cy="50"  
 r="4"  
 过滤器=“url(#shadow-small)”  
 填充="#303335">  
 </circle> <!-- clock's hands -->  
 <!-- centered in the clock and rotated according to the passage of time in the 0-360 range -->  
 <g  
 类=“手”  
 变换=“翻译(50 50)”  
 >  
 <g  
 类=“分钟”  
 变换="旋转(240)"><!-- change rotation of this group to affect both clock's hand -->  
 <path  
 填充="#fff"  
 d="M -0.4 8 h 0.8 v -33 h -0.8 z">  
 </path>  
 <circle  
 填充="#303335"  
 cx="0"  
 cy="0"  
 r="0.6">  
 </circle>  
 </g> <g  
 类=“秒”  
 变换="旋转(80)"><!-- change rotation of this group to affect both clock's hand -->  
 <path  
 填充="#EA3F3F"  
 d="M -0.4 10 h 0.8 v -45 h -0.8 z">  
 </path>  
 <circle  
 笔画宽度=“0.4”  
 中风=“#EA3F3F”  
 填充="#303335"  
 cx="0"  
 cy="0"  
 r="0.8">  
 </circle>  
 </g>  
 </g>  
 </svg> <!-- div wrapping the controls to change the number of hours/minutes/seconds -->  
 <div class="controls">  
 <div class="controls__control" data-control="hours">  
 <button>+</button>  
 <span class="control--hours">H</span>  
 <button>-</button>  
 </div> <div class="controls__control" data-control="minutes">  
 <button>+</button>  
 <span class="control--minutes">米</span>  
 <button>-</button>  
 </div> <div class="controls__control" data-control="seconds">  
 <button>+</button>  
 <span class="control--seconds">s</span>  
 <button>-</button>  
 </div>  
 </div>

您可能还想下载: HTML、CSS 和 JavaScript 中的 WebGL Apple Cards

CSS:

 @import url("https://fonts.googleapis.com/css?family=Barlow|Barlow+Condensed&display=swap"); * {  
 box-sizing:边框框;  
 填充:0;  
 边距:0;  
 }  
 /* 将包裹控件的 svg 和 div 放置在另一个之上 */  
 身体 {  
 最小高度:100vh;  
 显示:弯曲;  
 弹性方向:列;  
 对齐项目:居中;  
 证明内容:中心;  
 背景:#262728;  
 字体家族:“巴洛”,无衬线;  
 }  
 /* 让描述 svg 的时钟扩展到覆盖视口的相当大一部分 */  
 SVG {  
 上边距:1rem;  
 宽度:60vmin;  
 高度:自动;  
 过滤器:url(#shadow-large);  
 }  
 SVG文本{  
 font-family: "Barlow Condensed", sans-serif;  
 } /* 并排显示控件 */  
 . 控制 {  
 显示:弯曲;  
 弹性包装:换行;  
 边距顶部:2rem;  
 }  
 /* 在列中显示 button+span 元素 */  
 . 控制 div {  
 文本对齐:居中;  
 显示:弯曲;  
 弹性方向:列;  
 保证金:1rem;  
 }  
 /* 使用与时钟相同的颜色设置按钮的样式 */  
 .controls div 按钮 {  
 边框:无;  
 边界半径:50%;  
 背景:#ea3f3f;  
 填充:0.25rem;  
 颜色:#fff;  
 宽度:48px;  
 高度:48px;  
 显示:弯曲;  
 证明内容:中心;  
 对齐项目:居中;  
 字体大小:1.5rem;  
 过滤器:url(#shadow-large);  
 保证金:0.5rem 0;  
 }  
 .controls div 跨度 {  
 颜色:#fff;  
 }

JavaScript:

 /* 脚本用途  
 1. 包括时钟中的 12 个数字,围绕 SVG 圆圈  
 1. 旋转时钟的指针以及遮罩以在 svg 中显示当前时间  
 1. 在描述控件的跨度中包含当前时间  
 1. 对单击按钮做出反应,以更新时钟和按钮上的时间  
 */ // 实用函数  
 // 函数将输入数字作为字符串返回 _and_ 将 0 添加到小于 10 的数字  
 const zeroPadded = number => ((number >= 10) ? number.toString() : `0${number}`); // 函数将 [0-23] 范围内的小时值作为输入并返回 12 小时格式  
 常量十二时钟 = (二十四时钟) => {  
 如果 (twentyFourClock === 0) {  
 返回 12;  
 } if (twentyFourClock > 12) {  
 返回二十四时钟 - 12;  
 }  
 返回二十四钟;  
 }; // 1. SVG钟面  
 const clockFace = document.querySelector('svg g.clock--face');  
 // 通过旋转、平移和旋转文本元素来添加十二个数字  
 // !通过效用函数为小于 10 的数字加零  
 for (让 i = 0; i < 12; i += 1) {  
 clockFace.innerHTML += `  
 <text  
 变换="旋转(${-90 + 30 * (i + 1)}) 翻译(34 0) 旋转(${90 - 30 * (i + 1)})" >  
 ${zeroPadded(i + 1)}  
 </text>  
 `;  
 }  
 // SVG & BUTTONS 当前时间  
 // 检索当前的小时数、分钟数和秒数  
 const now = new Date();  
 const hours = now.getHours();  
 常量分钟 = now.getMinutes();  
 常量秒 = now.getSeconds(); // 作为 0-23 范围内的小时,标准化 1-12 范围内的值  
 常量时间 = {  
 小时:十二时钟(小时),// 1-12  
 分钟,// 0-59  
 秒,// 0-59  
 }; // 创建另一个描述时间值的对象,用于手的旋转  
 // 这是为了避免在时间回到 0(或小时数回到 1)时发生故障  
 常量旋转 = {  
 小时:十二时钟(小时),  
 分钟,  
 秒,  
 }; // 使用这些值来更新 svg 和 span 元素的文本  
 常量条目 = Object.entries(time);  
 entry.forEach(([key, value]) => {  
 日本动画片({  
 目标:`g.${key}`,  
 转换:(键 === '小时')? `rotate(${-15 + value * 30})` : `rotate(${value * 6})`,  
 持续时间:2000,  
 }); const span = document.querySelector(`span.control--${key}`);  
 span.textContent = zeroPadded(value);  
 });  
 // 按钮点击事件  
 常量按钮 = document.querySelectorAll('button'); // 函数根据输入指令返回时间和旋转对象的新值  
 函数更新值(指令){  
 /* 解构必要的信息  
 键:小时、分钟或秒  
 操作:+ 或 -  
 timeValue:[1-12] 或 [0-59] 范围内的数字  
 旋转值:数字  
 */  
 const { key, operation } = 指令;  
 const { timeValue, rotationValue } = 指令; // 根据前一个值和当前操作创建度数  
 常数度=操作==='+'?旋转值 + 1 :旋转值 - 1;  
 // 根据操作创建小时/分钟/秒数  
 让值 = 操作 === '+' ? timeValue + 1 : timeValue - 1; // 将值格式化为在规定范围内  
 如果(键==='小时'){  
 价值 = 价值 > 12 ? 1:价值=== 0? 12:值;  
 } 别的 {  
 价值 = 价值 > 59 ? 0 : 值 < 0 ? 59:价值;  
 } // 返回更新的时间和旋转值  
 返回{值,度};  
 }  
 // 在按钮元素上注册单击时调用的函数  
 函数句柄点击(){  
 // 从包装容器和当前元素中检索必要的信息  
 const key = this.parentElement.getAttribute('data-control');  
 常量操作 = this.textContent;  
 // 取回之前的值  
 常量时间值=时间[键];  
 常量旋转值=旋转[键]; // 根据 set 指令调用函数更新时间和旋转值  
 常量指令 = {  
 钥匙,  
 手术,  
 时间值,  
 旋转值,  
 };  
 常量 { 值,度 } = updateValues(指令); // 更新对象  
 时间[键] = 值;  
 旋转[键] = 度; // 更新匹配手的位置  
 日本动画片({  
 目标:`g.${key}`,  
 转换:(键 === '小时')? `rotate(${-15 + degree * 30})` : `rotate(${degrees * 6})`,  
 持续时间:400,  
 // 从输入按钮中移除事件监听器,直到动画完成  
 开始: () => buttons.forEach(button => button.removeEventListener('click', handleClick)),  
 完成: () => buttons.forEach(button => button.addEventListener('click', handleClick))  
 }); // 更新匹配范围的文本  
 const span = document.querySelector(`span.control--${key}`);  
 span.textContent = zeroPadded(value);  
 } button.forEach(button => button.addEventListener('click', handleClick));

HTML、CSS 和 JavaScript 代码片段开启, AllWebCodes.com

完毕!享受 受控时钟片段

现在下载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/36990/22461612

posted @ 2022-09-16 12:24  哈哈哈来了啊啊啊  阅读(26)  评论(0编辑  收藏  举报