C++程序员爱的表白,心形图示例
【实例简介】
表白爱之“心”
【实例截图】
文件:590m.com/f/25127180-494402272-8b45a2(访问密码:551685)
【核心代码】# include<stdio.h>
# include<math.h>
# define R 16
void main()
{char xin[2*R 1][2*R 1];int t,x,y;double d;for(x=0;x<2*R 1;x )for(y=0;y<2*R 1;y )xin[x][y]=' ';for(t=0;t<=360;t =8){d=t*3.14159/180;x=(int)(R*sin(d/2)*sin(d)) R;y=(int)(R*sin(d/2)*cos(d)) R;if(t%40==0)xin[x][y]='L';else if(t%40==8)xin[x][y]='O';else if(t%40==16)xin[x][y]='V';else if(t%40==24)xin[x][y]='E';else xin[x][y]='*';}for(x=0;x<2*R 1;x ){for(y=0;y<2*R 1;y )printf("%2c",xin[x][y]);printf("\n");}}
以下内容无关:
-------------------------------------------分割线---------------------------------------------
什么是 CSS Motion Path 运动路径?
什么是 CSS Motion Path 运动路径?利用这个规范规定的属性,我们可以控制元素按照特定的路径进行位置变换的动画。并且,这个路径可以是非常复杂的一条路径。
在进一步介绍 CSS Motion Path 之前,我们先看看使用传统的 CSS 的能力,我们如何实现路径动画。
CSS 传统方式实现直线路径动画
在之前,我们希望将一个物体从 A 点直线运动到 B 点,通常而言可以使用 transform: translate()、top | left | bottom | right 或者 是 margin 之类的可以改变物体位置的属性。
简单的一个 Demo:
CSS 传统方式实现曲线路径动画
当然,CSS 也可以实现一些简单的曲线路径动画的。如果我们希望从 A 点运动到 B 点走的不是一条直线,而是一条曲线,该怎么做呢?
对于一些简单的圆弧曲线路径,还是可以借助一些巧妙的办法实现的,看看下面这个例子。
这次,我们使用了两个元素,子元素是希望被曲线运动的小球,但是实际上我们是通过设定了父元素的 transform-origin,让父元素进行了一个 transform: rotate() 的运动带动了子元素的小球:
.g-container { position: relative; width: 10vmin; height: 70vmin; transform-origin: center 0; animation: rotate 1.5s infinite alternate; } .g-ball { position: absolute; width: 10vmin; height: 10vmin; border-radius: 50%; background: radial-gradient(circle, #fff, #000); bottom: 0; left: 0; } @keyframes rotate { 100% { transform: rotate(90deg); } } 为了方便理解,在运动的过程中,我让父元素的轮廓显现出来:
这样,我们算是勉强得到了一个非直线路径运动动画,它的实际运动轨迹是一条曲线。
然而,这基本上是之前 CSS 能做到的极限了,使用纯 CSS 的方法,没办法实现更复杂的路径动画,譬如下面这样一条路径动画:
直到现在,我们有了一种更为强大的专门做这个事情的规范,也就是本文的主角 – CSS Motion Path。
CSS Motion Path 实现直线路径动画
CSS Motion Path 规范主要包含以下几个属性:
offset-path:接收一个 SVG 路径(与 SVG 的path、CSS 中的 clip-path 类似),指定运动的几何路径
offset-distance:控制当前元素基于 offset-path 运动的距离
offset-position:指定 offset-path 的初始位置
offset-anchor:定义沿 offset-path 定位的元素的锚点。 这个也算好理解,运动的元素可能不是一个点,那么就需要指定元素中的哪个点附着在路径上进行运动
offset-rotate:定义沿 offset-path 定位时元素的方向,说人话就是运动过程中元素的角度朝向
下面,我们使用 Motion Path 实现一个简单的直线位移动画。
offset-path 接收一个 SVG 路径,指定运动的几何路径。与 SVG 的path、CSS 中的 clip-path 类似,对于这个 SVG Path 还不太了解的可以戳这里先了解下 SVG 路径内容:SVG 路径
我们会得到如下结果:
通过控制元素的 offset-distance 从 0% 变化到 100% 进行元素的路径动画。
当然,上述的动画是最基本的,我可以充分利用 path 的特性,增加多个中间关键帧,稍微改造下上述代码:
div {
// 只改变运动路径,其他保持一致
offset-path: path(“M 0 0 L 100 0 L 200 0 L 300 100 L 400 0 L 500 100 L 600 0 L 700 100 L 800 0”);
animation: move 2000ms infinite alternate linear;
}
@keyframes move {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
}
}
这里最主要还是运用了 path 中的 L 指令,得到了如下图这样一条直线路径:
image
最终的效果如下,与利用 transform: translate() 添加多个关键帧类似:
完整的 Demo 你可以戳这里:CodePen Demo – CSS Motion Path Demo
CSS Motion Path 实现曲线路径动画
上面的运动轨迹都是由直线构成,下面我们看看如何使用 CSS Motion Path 实现曲线路径动画。
其实原理还是一模一样,只需要在 offset-path: path() 中添加曲线相关的路径即可。
在 SVG 的 Path 中,我们取其中一种绘制曲线的方法 – 贝塞尔曲线,譬如下述这条 path,其中的 path 为 d=“M 10 80 C 80 10, 130 10, 190 80 S 300 150, 360 80”:
对应这样一条连续的贝塞尔曲线:
将对应的路径应用在 offset-path: path 中:
可以看到,元素是沿着贝塞尔曲线的路径进行运动的,并且,由于这次没有限制死 offset-rotate,元素的朝向也是跟随路径的朝向一直变化的。(可以联想成开车的时候,车头一直跟随道路会进行变化的,带动整个车身的角度变化)
完整的 Demo 你可以戳这里:CodePen Demo – CSS Motion Path Demo
理解 offset-anchor 运动锚点
OK,那么接下来,我们再看看 offset-anchor 如何理解。
还是上述的 DEMO,我们把小正方形替换成一个三角形,并且把运动的曲线给画到页面上,像是这样:
其中,三角形是通过 clip-path 实现的:
width: 40px;
height: 40px;
clip-path: polygon(0 0, 100% 50%, 0 100%);
background: linear-gradient(#fc0, #f0c);
通常而言,沿着曲线运动的是物体的中心点(类比 transform-origin),在这里,我们可以通过 offset-anchor 改变运动的锚点,譬如,我们希望三角形的最下方沿着曲线运动:
.ball {
width: 40px;
height: 40px;
clip-path: polygon(0 0, 100% 50%, 0 100%);
offset-path: path(‘M 10 80 C 80 10, 130 10, 190 80 S 300 150, 360 80’);
offset-anchor: 0 100%;
background: linear-gradient(#fc0, #f0c);
animation: move 3000ms infinite alternate linear;
}
@keyframes move {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
}
}
经过实测,Can i use 上写着 offset-anchor 属性的兼容性在为 Chrome 79+、Firefox 72+,但是实际只有 Firefox 支持,Chrome 下暂时无法生效~
完整的 Demo 你可以戳这里:CodePen Demo – CSS Motion Path offset-anthor Demo
运用 Motion Path 制作动画效果
OK,上面我们基本把原理给过了一遍,下面我们就看看,运用 Motion Path,可以在实践中如何运用。
利用 Motion Path 制作按钮效果
利用运动路径,我们可以制作一些简单的按钮点击效果。在之前,我在 CodePen 上见到过这样一种按钮点击效果:
其原理是运用了 background-radial 去生成每一个小圆点,通过控制 background-position 控制小圆点的位移,详细的 Demo 代码你可以戳这里:
CodePen Demo – Bubbly button (Design by Gal Shir)
但是小圆点的运动路径基本上都是直线,运用本文的 Motion Path,我们也可以实现一些类似的效果,核心代码如下,HTML 这里我们使用了 Pug 模板,CSS 使用了 SASS:
.btn
-for(var i=0; i<60; i++)
span.dot
.btn {
position: relative;
padding: 1.5rem 4.5rem;
}
.btn .dot {
position: absolute;
width: 4px;
height: 4px;
@for $i from 1 through KaTeX parse error: Expected '}', got '&' at position 14: count { &̲:nth-child(#{i}) {
top: 50%;
left: 50%;
transform: translate3d(-50%, -50%, 0) rotate(#{360 / $count * $i}deg);
}
}
&::before {
content: “”;
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 4px;
border-radius: 50%;
offset-path: path(“M0 1c7.1 0 10.7 2 14.3 4s7.1 4 14.3 4 10.7-2 14.3-4 7.2-4 14.3-4 10.7 2 14.3 4 7.1 4 14.3 4 10.7-2 14.3-4 7.1-4 14.3-4 10.7 2 14.3 4 7.1 4 14.3 4 10.7-2 14.3-4 7.1-4 14.3-4 10.7 2 14.3 4 7.1 4 14.3 4”);
offset-distance: 0;
}
}
.btn.is-animating:active .dot:nth-child(4n+1)::before {
animation: dot var(–animation-time) var(–animation-timging-function);
}
.btn.is-animating:active .dot:nth-child(4n+2)::before {
border: 1px solid var(–color-primary);
background: transparent;
animation: dot var(–animation-time) var(–animation-timging-function) 0.1s;
}
.btn.is-animating:active .dot:nth-child(4n+3)::before {
animation: dot var(–animation-time) var(–animation-timging-function) 0.2s;
}
.btn.is-animating:active .dot:nth-child(4n)::before {
border: 1px solid var(–color-primary);
background: transparent;
animation: dot var(–animation-time) var(–animation-timging-function) 0.3s;
}
@keyframes dot {
0% {
offset-distance: 0%;
opacity: 1;
}
90% {
offset-distance: 60%;
opacity: .5;
}
100% {
offset-distance: 100%;
opacity: 0;
}
}
别看代码多有一点点复杂,但是不难理解,本质就是给每个子元素小点点设置同样的 offset-path: path(),给不同分组下的子元素设定不同的旋转角度,并且利用了动画延迟 animation-delay 设定了 4 组同时出发的动画。
这里我们的轨迹 path 不是直线,效果如下:
完整的代码你可以戳这里:
CodePen Demo – Button Animation with CSS Offset Paths
利用 Motion-Path 绘制地图路径寻路动画
这个也是非常实用的,现在我们可以完全利用 CSS Motion-Path 实现地图上的寻路动画:
该 Demo 源自 Ahmad Emran,完整的代码你可以戳这里:
CodePen Demo – CodePen Home Animation with offset-path | Only Using CSS & HTML
利用 Motion-Path 绘制路径动画
又或者,我们利用 Path 能绘制任意路径的特性,实现各种我们想要的路径,譬如加入购物车的抛物线,或者各类运动轨迹,都不在话下,这里再提供一个 Demo:
CodePen Demo – CSS Motion Path offset-path animation
Can i Use - Motion-Path
来看看 Motion-Path 目前的兼容性如何?截止至 2021-04-27。
Can i Use - Motion-Path:
目前而言,除去 IE 浏览器,就等待 Safari 何时能够兼容了,具体是否使用,还需要根据目标群体浏览器使用情况进行取舍。
C++程序员爱的表白,心形图示例相关推荐
- 程序员 - 爱的表白
个人觉得不错.自己修改了一些内容,放到自己的github上,大家一起学习. https://github.com/skzxc/skzxc.github.io 转载于:https://www.cnblo ...
- 520程序员的浪漫表白
520程序员的浪漫表白 说明 预览 html部份代码 说明 本文作品创意不是我想出来的,只是想用推荐卡在这"520"的节日里给更多的人分享下好的作品,可以让新人程序员更加热爱现在做 ...
- HTML5纯css实现爱心动画效果DW、vscode来自程序员的浪漫表白
HTML5纯css实现爱心动画效果DW来自程序员的浪漫表白 一.拉面版 css部分 *{/* 初始化页面元素内外边距*/margin:0;padding: 0;}body{/* 弹性布局元素垂直水平居 ...
- 程序员七夕情人节表白代码
程序员七夕情人节表白代码 MainClass:com.wujinxi.ShowLove package com.wujinxi;import java.awt.*; import java.awt.d ...
- [java]程序员的爱情表白
程序员的爱情表白: 我能抽象出整个世界... 但是我不能抽象出你... 因为你在我心中是那么的具体... 所以我的世界并不完整... 我可以重载甚至覆盖这个世界里的任何一种方法... 但是我却不能重载 ...
- 精明的程序员——爱学习
精明的程序员--爱学习 上一篇说到,尽可能少地去做重复的工作,因为它很难让人进步.这篇说说如何寻求进步,答案就是学习. 先说说我的大学经历吧:一二年级打基础,三年级开始做了第一个大项目,四年级就实习了 ...
- python表白代码如何运行-程序员如何实现表白代码
程序员实现表白代码的方法:首先打开代码编辑器:然后输入告白代码[while (life < end) {love++;},var you = function from_future_impor ...
- 这篇文章太懂程序员了,扎心了
这篇文章太懂程序员了,扎心了,分享给大家! 来源:
- 利用MATLAB绘制各种表白心形-跳动心形
利用MATLAB绘制各种表白心形♥ 跳动三维心形 表白情人节必备 面向工科屌丝男 固定心形的各种画法见下面连接 链接: https://blog.csdn.net/weixin_44044161/ar ...
最新文章
- dnf跨一服务器修复,DNF跨区服务器炸裂:一阶段史诗回档,官方补偿何在
- golang 字符串分割
- http中的净荷 payload(有效载荷、有效负载)是什么?
- MMSE法用于MIMO系统
- 【收藏】IntelliJ Idea中配置JavaFX Scene Builder
- 使用 Boost.Multiprecision 来实现高精度高斯-拉盖尔正交积分
- Docker 与 DevOps自动化部署实践
- LVS(2)——针对于LVS的增删改方法
- python计算组合数_python排列组合算法
- Ext JS+Android+SSH整合开发Web与移动SNS
- 将CString转换成string ...
- 自然语言处理(NLP)语义分析:“词汇级”语义分析【词义消歧、词义表示和学习】、“句子级”语义分析【浅层语义分析(语义角色标注)、深层语义分析】
- 你知道现在有多少AI开放平台吗?
- 思维模型 SMART原则
- 关于rand()和srand()
- OpenStack--炼数成金
- 关于百度地图设置显示的比例尺大小
- JVM和Java体系架构
- 哈夫曼树的构建及哈夫曼树编码
- 网络号 IP地址 子网掩码如何计算
热门文章
- python爬取二次元肥宅最喜欢的壁纸图片,看过的都说爱了
- ubuntu使用minicom连接交换机/路由器Console口详细教程
- Python 类的定制
- 线性回归中的最小二乘法和梯度下降法比较
- 写给需要面试经验的交互设计师(上)
- codeforces contest 869 problem C(组合数)
- hive 复杂数据类型 在数仓中应用(array、map、struct、和其组合应用)
- 怎样将excel表格导入天正_怎样把excel表格转换成cad读取
- 广受青睐的题材---蒸汽朋克[Steampunk](转)
- 打造XP系统万能克隆-Ghost全攻略