欢迎访问我的博客GISer空间。

1. CSS3:每块板作为为一个dom元素。

1.1 用一个容器和七个元素来表示七块板。

<div class="wrap"><div class="t t1"></div><div class="t t2"></div><div class="t t3"></div><div class="t t4"></div><div class="t t5"></div><div class="t t6"></div><div class="t t7"></div>
</div>

1.2 通过CSS3的transform的平移、缩放、旋转、变形多种操作来确定七块板的位置。

  设置wrap的position为relative,七块板为absolute,并设置top和left为0,这样初始化时七块板都位于左上角,然后将板的transform-origin设为左上角,方便定位计算。尺寸和位置变化参考下图。

1.3 CSS3部分样式

.wrap {position: relative;background: #F1F1F1;width: 600px;height: 600px;margin-left: auto;margin-right: auto;
}
.t {position: absolute;top: 0;left: 0;width: 0;height: 0;transform-origin: 0 0;
}
.t1 {border-top: 212.13203435596425732025330863145px solid #008FDE;border-right: 212.13203435596425732025330863145px solid transparent;animation: t1_move 5s infinite;
}
@keyframes t1_move {0%{transform: translate(300px, 300px) rotate(-135deg);}25%{transform: translate(300px,250px) rotate(-135deg);}50%{transform: translate(350px,250px) rotate(-90deg);}75%{transform: translate(300px,300px) rotate(-90deg);}100%{transform: translate(300px,300px) rotate(-135deg);}
}
.t2 {border-top: 212.13203435596425732025330863145px solid #FEF900;border-right: 212.13203435596425732025330863145px solid transparent;animation: t2_move 5s infinite;
}
@keyframes t2_move {0%{transform: translate(300px, 300px) rotate(135deg);}25%{transform: translate(250px,300px) rotate(135deg);}50%{transform: translate(350px,350px);}75%{transform: translate(300px,300px);}100%{transform: translate(300px,300px) rotate(135deg);}
}
.t3 {width: 106.06601717798212866012665431573px;height: 106.06601717798212866012665431573px;background: #9A4378;animation: t3_move 5s infinite;
}
@keyframes t3_move {0%{transform: translate(300px,300px) rotate(45deg);}25%{transform: translate(300px,350px) rotate(45deg);}50%{transform: translate(143.994px,143.994px);}75%{transform: translate(193.934px,193.934px);}100%{transform: translate(300px,300px) rotate(45deg);}
}
.t4 {border-top: 106.06601717798212866012665431573px solid #E1177B;border-right: 106.06601717798212866012665431573px solid transparent;animation: t4_move 5s infinite;
}
@keyframes t4_move {0%{transform: translate(300px,300px) rotate(-45deg);}25%{transform: translate(350px,300px) rotate(-45deg);}50%{transform: translate(250px,143.994px) rotate(-180deg);}75%{transform: translate(300px,193.934px) rotate(-180deg);}100%{transform: translate(300px,300px) rotate(-45deg);}
}
.t5 {border-top: 106.06601717798212866012665431573px solid #00913E;border-right: 106.06601717798212866012665431573px solid transparent;animation: t5_move 5s infinite;
}
@keyframes t5_move {0%{transform: translate(225px,375px) rotate(45deg);}25%{transform: translate(225px,425px) rotate(45deg);}50%{transform: translate(250px,350px) rotate(90deg);}75%{transform: translate(300px,300px) rotate(90deg);}100%{transform: translate(225px,375px) rotate(45deg);}
}
.t6 {width: 150px;height: 75px;background: #2A0F70;animation: t6_move 5s infinite;
}
@keyframes t6_move {0%{transform: translate(450px,150px) rotate(90deg) skew(45deg);}25%{transform: translate(500px,150px) rotate(90deg) skew(45deg);}50%{transform: translate(143.994px,350px) rotate(45deg) skew(45deg);}75%{transform: translate(193.934px,300px) rotate(45deg) skew(45deg);}100%{transform: translate(450px,150px) rotate(90deg) skew(45deg);}
}
.t7 {border-top: 150px solid #EB7A14;border-right: 150px solid transparent;animation: t7_move 5s infinite;
}
@keyframes t7_move {0%{transform: translate(450px,450px) rotate(180deg);}25%{transform: translate(500px,500px) rotate(180deg);}50%{transform: translate(37.868px,300px) rotate(-45deg);}75%{transform: translate(87.868px,300px) rotate(-45deg);}100%{transform: translate(450px,450px) rotate(180deg);}
}

1.4 效果

2. 附:Canvas实现七巧板(HTML5新特性)

2.1 Canvas标签

<canvas id="canvas" style="background-color: #E6E6E6; display: block; margin: 10px auto"></canvas>

2.2 Script代码

//定义tangram数组,表示七块板对象,每个对象中p属性表示每块板的定点坐标,color属性表示填充颜色。
var tangram = [{p:[{x:150,y:150},{x:450,y:150},{x:300,y:300}],color:"#008FDE"},{p:[{x:150,y:150},{x:300,y:300},{x:150,y:450}],color:"#FEF900"},{p:[{x:300,y:300},{x:375,y:375},{x:300,y:450},{x:225,y:375}],color:"#9A4378"},{p:[{x:300,y:300},{x:375,y:225},{x:375,y:375}],color:"#E1177B"},{p:[{x:150,y:450},{x:225,y:375},{x:300,y:450}],color:"#00913E"},{p:[{x:375,y:225},{x:450,y:150},{x:450,y:300},{x:375,y:375}],color:"#2A0F70"},{p:[{x:300,y:450},{x:450,y:300},{x:450,y:450}],color:"#EB7A14"}
];
//获取canvas对象,并设置宽和高,然后调用draw函数。
window.onload = function() {var canvas = document.getElementById("canvas");canvas.width = 600;canvas.height = 600;var context = canvas.getContext("2d");for(var i = 0; i < tangram.length; i++)draw(tangram[i], context);
};
//draw函数,绘制每一块板。
function draw(piece, cxt) {cxt.beginPath();cxt.moveTo(piece.p[0].x, piece.p[0].y);for(var i = 1; i < piece.p.length; i++)cxt.lineTo(piece.p[i].x, piece.p[i].y);cxt.closePath();cxt.fillStyle = piece.color;cxt.fill();
}

3. 参考资料

纯CSS3打造七巧板

用CSS代码写出的各种形状图形的方法

CSS3动画详解

腾讯动画手册

转载于:https://my.oschina.net/huanglii/blog/880946

CSS3制作七巧板动画相关推荐

  1. css3制作旋转动画

    现在的css3真是强大,之前很多动画都是用jq来实现,但是css3制作的动画要比jq实现起来简单很多,今天呢,我自己也写了一个css旋转动画和大家分享.效果如下面的图片 思路:1.制作之前呢,我们先来 ...

  2. 纯html5语言编写的动画,8个纯CSS3制作的动画应用及源码

    本文作者html5tricks,转载请注明出处 对于一个复杂的图形或者动画来说,之前我们的处理方式是图片叠加或者利用CSS+JavaScript的方法,然而随着CSS3标准的不断成熟,我们甚至完全可以 ...

  3. Css3制作风琴动画效果

    Css3制作风琴动画效果 开发工具与关键技术:DW 作者:谢嘉浚 撰写时间:2019-03-30 使用css3来制作风琴动画效果,首先在html放一个大的div,设置它的宽高.背景颜色.再在div里面 ...

  4. HTML学习笔记9——CSS3制作网页动画

    CSS3变形 CSS3变形是一些效果的集合 如平移.旋转.缩放.倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移.旋转.缩放.倾斜等变化 transform:[tr ...

  5. python绘制七巧板_CSS3制作七巧板动画

    欢迎访问我的博客GISer空间. 1. CSS3:每块板作为为一个dom元素. 1.1 用一个容器和七个元素来表示七块板. 1.2 通过CSS3的transform的平移.缩放.旋转.变形多种操作来确 ...

  6. css3 制作阳光,CSS3 制作 Loading 动画

    虽然现在互联网的网速越来越快,但永远都跟不上我们生活节奏的加快.资深网瘾少女表示,这世上最刺眼的不是阳光,而是" 正在加载":最长的不是周杰伦的电影,而是" 正在加载&q ...

  7. CSS3——制作带动画效果的小图片

    下了一个软件:ScreenToGif用来截取动态图片,终于可以展示我的小动图啦,嘻嘻,敲开心! main.html <!DOCTYPE html> <html lang=" ...

  8. 用HTML和CSS3制作3D动画

    代码展示 HTML代码: CSS3代码: 效果图:

  9. html5 渐变动画效果图,html5+css3城市场景动画_觉唯设计

    最近一直在研究HTML5的动画表现,特别是在移动设备上的呈现.在上一篇文章<盛开的CSS3梦幻荷花>中提到如何用css3制作丰富动画效果的两个思路,当然除此之外,结合使用javascrip ...

最新文章

  1. esp freertos_如何开始使用FreeRTOS和ESP8266
  2. 做行业研究时如何获取相关数据?
  3. OpenCV图像旋转的原理与技巧
  4. Rocket 架构设计
  5. Gartner表示:2017年全球IT支出上升2.7% 中国IT支出达到2.34万亿
  6. 对数据可视化的理解_使数据可视化更容易理解
  7. springboot启动过程_spring5/springboot2源码学习 -- spring boot 应用的启动过程
  8. [ZZ]关于内存中栈和堆的区别
  9. JS String 对象 常用方法
  10. 尝试使用Java6API读取java代码
  11. 博文视点经典新书样章下载
  12. Jenkins管理静态资源
  13. java中数组下标越界对应的异常类是_Java 常见异常种类
  14. xp计算机字体在哪,Windows XP系统字体库在哪-如何安装新字体
  15. python程序设计实用教程答案_Python程序设计实用教程
  16. Android 常用框架大全
  17. IE6-IE11兼容性问题列表及解决办法总结
  18. 约坡慈尉仪特诨谙凹毖仍怯滋傥丛
  19. 虚函数、纯虚函数、虚继承、多继承
  20. 第六篇:UE4小功能,指南针的实现

热门文章

  1. 统计学本科考计算机 研究生,考研公认的5大难考专业,你的专业上榜了吗?
  2. 联易融遭做空背后:严重依赖房地产领域客户,股价已然“腰斩”
  3. 优酷路由宝刷OPENWRT心得体会
  4. Hadoop之——Hadoop3.x运行自带的WordCount报错Container exited with a non-zero exit code 1.
  5. pip使用163源(linux)
  6. 65、记录使用科大讯飞的声纹识别从官方的Python Demo转C++ Demo路程
  7. Marching Cube
  8. 方便高效的JAVA对象转换工具
  9. C中scanf()!EOF的理解
  10. Web 3D烟雾火焰喷水粒子效果-WebGL/Threejs技术倾心打造