python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

3bc7d9f73e89d5ce132f395c5e32047f.png

作者:爱编程的小和尚

原文链接:https://blog.csdn.net/Newbie___/article/details/105378852

抖音上很火的时钟屏保,被我改造完后用来准备准备准备表白,谁说程序员不浪漫?!

不知道一直关注小编我的小伙伴们之前有没有JQuery实现的动态罗盘时钟的这篇文章《基于JQuery的动态罗盘时钟》,今天就拿这个进行扩展,实现向自己心爱的人表白。

闲言少叙,书归正文,因为gif格式的图片只能上传5M,所以我只能切成两块,中间还删减了一些,大家凑合着看,不要打我,大家可以把源码拷下来,源码在最下面,自己运行康康,嘿嘿,话不多说,上图:

8d21ebf86976dbc08f547b3277a31cb7.gif
02ab47c5ae855c1bb356658e5f9d9930.gif

效果主要分成了三个部分,第一个是进入页面的时候平铺的时钟效果,当点击按钮的时候,变为圆盘时钟,左边的文字以键盘敲击的而方式出现。我来依次讲解三个部分:

index.html

.btn{    width: 158px;    height:63px;    position: absolute;    cursor: pointer;    left: 50%;    margin-left: -79px;    top: 400px;    background-image: url(./btnImg.png);    background-size: 100% 100%;}

我们在index.html中仅放了很少的一部分代码 ,存放文字的text类名的p标签,存放时钟效果的div和按钮

我们在看一看index.css,设置时钟的背景色,粉粉的

.btn{    width: 158px;    height:63px;    position: absolute;    cursor: pointer;    left: 50%;    margin-left: -79px;    top: 400px;    background-image: url(./btnImg.png);    background-size: 100% 100%;}

设置文字的颜色,蓝蓝的颜色

.text{    position: absolute;    left: 50px;    top: 120px;    color:rgb(106, 213, 255);}

设置按钮的样式,和引入图片。

.btn{    width: 158px;    height:63px;    position: absolute;    cursor: pointer;    left: 50%;    margin-left: -79px;    top: 400px;    background-image: url(./btnImg.png);    background-size: 100% 100%;}

如果觉得我的配色不好的话,可以自行修改,毕竟男钢铁程序员的审美有限,空有一身套路,却没有女朋友,我哭了。

我们的html和css都非常少,那就意味着js代码很多了,但是没关系,我都是用的原生js实现的,只要有一丢丢基础就可以了。

首先我们需要定义月份、天、星期、小时、分钟、秒的基础数据(在文章最后)。每一个数据,都会对应着生成一个dom元素,所以我在这里定义了一个allSet的二维数组,数组内容分别是dom元素和对应的数据。

//存放数据

var monthContent = [];var dayContent = [];var weekContent = [];var hourContent = [];var minuteContent = [];var secondsContent = [];//存放生成dom元素var monthDom=[];var dayDom=[];var weekDom=[];var hourDom=[];var minutesDom=[];var secondsDom=[];//二维数组,0存放数据,1存放dom元素var allSet = [                [monthContent,monthDom],                [dayContent,dayDom],                [weekContent,weekDom],                [hourContent,hourDom],                [minuteContent,minutesDom],                [secondsContent,secondsDom]            ];

我们三个部分中的第一部分便是平铺效果的时钟:其实非常简单,只要循环alllSet中的所有数据创建对应的dom元素,插入class类名就可以了,样式我已经在css中写好了。

function init(){    for(var i=0;i

//创建dom元素

function createLabel(text){    var oDiv = document.createElement("div");    oDiv.innerText = text;    oDiv.classList.add("label");    return oDiv;}

还有一个非常重要的步骤就是获取当前的时间,并把当前的时间设置成不同的颜色。

function getTime(){    var labels = document.getElementsByClassName("label");    //先循环一下,把所有的样式都变为黑色和正常状态下的字体    for(var i=0;i

当文档加载完成的时候就开始运行。

window.onload = function(){    init();    changePosition();    setInterval(() => {        getTime();    }, 100);}

顺便在这里解释一下changePosition()这个函数(我自己封装的,别害怕哈哈哈)实现了把当前的dom元素都改为绝对定位再放到原来的位置上。

再为按钮实现以一个点击事件,当点击按钮的时候,将其转换为圆盘的时钟状态。我们需要将整个屏幕旋转90deg,是因为我们要高亮显示的字是横着的,并且一直在右侧固定。

function btnClick(){    //改变状态的变量    isChange = true;    //旋转90deg    document.getElementsByClassName("btn")[0].style.display = "none"    clock.style.transform = "rotate(90deg)"        //延迟200毫秒展示文字    setTimeout(() => {        showText()    }, 200);}

在获取当前时间的getTime方法中,我们添加这样的判断,计算每一个时间的旋转角度。我们需要注意的是:我们在之前将整个屏幕旋转了90deg,对应的x轴和y轴也会旋转

function getTime(){        //之前的一大堆代码...        if(isChange){        //设置圆盘的中心点        var midX = document.body.clientWidth / 2;        var midY = document.body.clientHeight / 2 -100;        for(var i=0;i

通过cos和sin函数,计算每个时间的位置 ,这个画图解释每个时间的比较复杂,好麻烦,我承认我懒了。所以大家自行脑补。

到了最后一部分,我们的文案啦。文案有逐个闪烁效果,每次换行以后原地闪烁三次,通过空格判断是否换行,通过英文的 , 来决定原地闪烁的次数,所以如果需要修改文案的话,只要按照格式就好啦。大家自己看吧代码注释写在里面了。

function showText(){    var logo = "我这个人,不太会说话 ,,,,也不太会谈恋爱 ,,,,但是呢,遇到你之后我才发现 ,,,,不是我不会 ,,,,是因为之前 ,,,,我根本没有遇到像你这么对路的人 ,,,,我真的很想跟你在一起 ,,,,我需要的不多 ,,,,我需要的只是在你需要的时候 ,,,,我恰好能在你身边 ,,,,我喜欢你呢 ,,,,并不是因为你漂亮 ,,,,而是因为 ,,,,你能给我一种别人给不了的特殊感觉"    var ptext = document.getElementsByClassName('text')[0];    var flag = 0;    var show = true;    var mouse = document.createElement("span");    mouse.style.position='absolute';    mouse.style.left ='0';    mouse.style.top ='0';    mouse.innerText = "__" //光标闪烁效果的光标    ptext.append(mouse);    var timer = setInterval(function(){        if(flag

全部代码:

文件目录

0aea50469e59c80e5a0496aad7d75c9d.png

index.html

    Document

index.css

*{    margin: 0;    padding: 0;}html,body{    width: 100%;    height: 100%;    background: #FF6A6A;}.clock{    width: 100%;    height: 100%;    position: relative;    background: #FF6A6A;}.btn{    width: 158px;    height:63px;    position: absolute;    cursor: pointer;    left: 50%;    margin-left: -79px;    top: 400px;    background-image: url(./btnImg.png);    background-size: 100% 100%;}.label{    display: inline-block;    font-size: 14px;    color: #000;    text-align: center;    padding:0 5px;    transform-origin: 0% 0%;    transition: all 1s;}.text{    position: absolute;    left: 50px;    top: 120px;    color:rgb(106, 213, 255);}.text span{    display: inline-block;    font-size: 18px;    padding-left: 2px;    padding-bottom: 5px;}

index.js

var clock = document.getElementsByClassName('clock')[0];var monthContent = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];var dayContent = ["一号", "二号", "三号", "四号", "五号", "六号", "七号", "八号", "九号", "十号", "十一号", "十二号", "十三号", "十四号", "十五号", "十六号", "十七号", "十八号", "十九号", "二十号", "二十一号", "二十二号", "二十三号", "二十四号", "二十五号", "二十六号", "二十七号", "二十八号", "二十九号", "三十号", "三十一号"];var weekContent = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];var hourContent = ["零点", "一点", "两点", "三点", "四点", "五点", "六点", "七点", "八点", "九点", "十点", "十一点", "十二点", "十三点", "十四点", "十五点", "十六点", "十七点", "十八点", "十九点", "二十点", "二十一点", "二十二点", "二十三点"];var minuteContent = ["零分","一分", "二分", "三分", "四分", "五分", "六分", "七分", "八分", "九分", "十分",    "十一分", "十二分", "十三分", "十四分", "十五分", "十六分", "十七分", "十八分", "十九分", "二十分",    "二十一分", "二十二分", "二十三分", "二十四分", "二十五分", "二十六分", "二十七分", "二十八分", "二十九分", "三十分",    "三十一分", "三十二分", "三十三分", "三十四分", "三十五分", "三十六分", "三十七分", "三十八分", "三十九分", "四十分",    "四十一分", "四十二分", "四十三分", "四十四分", "四十五分", "四十六分", "四十七分", "四十八分", "四十九分", "五十分",    "五十一分", "五十二分", "五十三分", "五十四分", "五十五分", "五十六分", "五十七分", "五十八分", "五十九分"];var secondsContent = ["我爱你","一秒", "Love", "三秒", "我爱你", "五秒", "Love", "七秒", "我爱你", "九秒", "Love",    "十一秒", "我爱你", "十三秒", "Love", "十五秒", "我爱你", "十七秒", "Love", "十九秒", "我爱你",    "二十一秒", "Love", "二十三秒", "我爱你", "二十五秒", "Love", "二十七秒", "我爱你", "二十九秒", "Love",    "三十一秒", "我爱你", "三十三秒", "Love", "三十五秒", "我爱你", "三十七秒", "Love", "三十九秒", "我爱你",    "四十一秒", "Love", "四十三秒", "我爱你", "四十五秒", "Love", "四十七秒", "我爱你", "四十九秒", "Love",    "五十一秒", "我爱你", "五十三秒", "Love", "五十五秒", "我爱你", "五十七秒", "Love", "五十九秒"];//存放生成dom元素var monthDom=[];var dayDom=[];var weekDom=[];var hourDom=[];var minutesDom=[];var secondsDom=[];var allSet = [                [monthContent,monthDom],                [dayContent,dayDom],                [weekContent,weekDom],                [hourContent,hourDom],                [minuteContent,minutesDom],                [secondsContent,secondsDom]            ];var isChange = false;function btnClick(){    isChange = true;    document.getElementsByClassName("btn")[0].style.display = "none"    clock.style.transform = "rotate(90deg)"    setTimeout(() => {        showText()    }, 200);}window.onload = function(){    init();    changePosition();    setInterval(() => {        getTime();    }, 100);}//初始化样式function init(){    for(var i=0;i {                allSet[i][1][j].style.position = "absolute";                allSet[i][1][j].style.left = x + "px";                allSet[i][1][j].style.top = y + "px";            }, 50);        }    }}function showText(){    var logo = "我这个人,不太会说话 ,,,,也不太会谈恋爱 ,,,,但是呢,遇到你之后我才发现 ,,,,不是我不会 ,,,,是因为之前 ,,,,我根本没有遇到像你这么对路的人 ,,,,我真的很想跟你在一起 ,,,,我需要的不多 ,,,,我需要的只是在你需要的时候 ,,,,我恰好能在你身边 ,,,,我喜欢你呢 ,,,,并不是因为你漂亮 ,,,,而是因为 ,,,,你能给我一种别人给不了的特殊感觉"    // var logo = "我是一个俗人 ,,,,看山是山 ,,,,看海是海 ,,,,看花是花 ,,,,唯独见了你 ,,,,心潮开始翻涌 ,,,,山岳百川开始震荡 ,,,,满天星光开始闪烁 ,,,,无需你一声令下 ,,,,我和天地间万物便通通奔向你";    var ptext = document.getElementsByClassName('text')[0];    var flag = 0;    var show = true;    var mouse = document.createElement("span");    mouse.style.position='absolute';    mouse.style.left ='0';    mouse.style.top ='0';    mouse.innerText = "__"    ptext.append(mouse);    var timer = setInterval(function(){        if(flag

————————————————

总结

需要源码的小伙伴,关注我,私信回复:时钟屏保表白 获取

作者:爱编程的小和尚

原文链接:https://blog.csdn.net/Newbie___/article/details/105378852

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节,你家的月饼都吃完了吗? 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据,我们来看看今年的“月饼消费”有哪些新趋势? 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用FuncT, TResult 委托实现API日志的记录

问题平常我们开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;那么我们一般怎么做的&#xff0c;一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。什么是FuncFunc&…

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…

python base64编码_JS和Python实现AES算法

1. AES原理AES算法是典型的对称加密算法&#xff0c;AES原理可以学习这两篇文档&#xff1a;漫画&#xff1a;什么是AES算法&#xff1a;https://www.toutiao.com/i6783550080784794124/AES加密算法的详细介绍与实现&#xff1a;https://blog.csdn.net/qq_28205153/article/det…

当你老了,一生最后悔什么?大数据告诉你!

‍ 当你老了&#xff0c;一生最后悔什么&#xff1f;

@scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务

定时任务的几种实现方式&#xff1a;Timer&#xff1a;Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。一般用的较少。Quartz&#xff1a;使用Quartz&…

小心 Enum Parse 中的坑

小心 Enum Parse 中的坑Intro最近使用枚举的时候&#xff0c;踩了一个小坑&#xff0c;分享一下&#xff0c;主要是枚举从 int 值转成枚举时可能会遇到Sample来看下面的示例&#xff1a;首先定义一个枚举&#xff1a;public enum Color : byte {Red 0,Green 1,Blue 2, }来看…

python判断列表是否为空_Jinja2: 判断返回的列表是否为空

我们在使用 Python 或者 Ansible 来进行自动化任务的时候常常会进行一些数据的组合和提取来生成文件。但是我们需要为不同的情况来做分析和进行判断。如果我们需要对返回的 list 来进行提取的时候我们常常只是运行一个 for loop 就解决了问题。如果输出如下所示&#xff1a;{&q…

在php中使用kind,KindEditor 4.x在PHP中的应用实例!

1.解压放入php项目静态资源文件夹&#xff0c;如下图&#xff1a;Paste_Image.png2.如果只是php使用&#xff0c;可以删除其它类型语言的文件夹&#xff0c;文件结构如下图&#xff1a;Paste_Image.png3.打开php文件夹&#xff0c;更改upload_json.php里文件上传目录文件夹至Up…

你的朋友国庆假期都去了哪里玩?微信大数据告诉你!最远的朋友圈签到竟然来自……

国庆中秋八天假 你是出门四处浪浪浪了 还是躺在家里看朋友圈里的世界名景 10月8日&#xff0c;微信发布《国庆假期微信大数据报告》 从出境人数、热门地区、境外消费等角度 全方位展示国庆期间微信用户的出游情况 哪些城市的人最爱出境游&#xff1f; 哪个国家是最热门的出境目…