一.简介

在一些企业广告或者网站需要一些动态文字特效的时候,往往有下面这几种选择:

1.Flash制作的文字特效

2.制作一个动态的GIF

3.Javascript+dom+css

4.SVG

二.javascript+Canvas文字特效

这篇我为大家介绍第五种,也是最强大的一种,上面四种都有局限性。

我使用的是javascript+Canvas,当然我们依然用Jscex,为什么Canvas制作文字特效最强大??

因为Canvas支持像素级别操作,它不仅可以宏观上制作一些文字特效,也可以深入实现文字粒子系统特效----Text Particle Systems。

当然Canvas的像素级别操作还广泛用于图片处理等更多领域,在HTML5实验室http://www.cnblogs.com/iamzhanglei/archive/2011/11/06/2237870.html里也有了好多案例··

三.特效实现

我们现在黑色背景下写一个“心”字:

1
2
3
4
5
6
7
var tex = "心";
cxt.fillStyle = "rgba(0,0,0,1)";
cxt.fillRect(0, 0, 430, 400);
cxt.fillStyle = "rgba(255,255,255,1)"
cxt.font = "bolder 400px 宋体";
cxt.textBaseline = 'top';
cxt.fillText(tex, 20, 20);

然后我们遍历所有的像素点,并把画上了字的像素点放进一个数组里面:

1
2
3
4
5
6
7
8
for (y = 1; y < 400; y += 10) {
    for (x = 1; x < 400; x += 10) {
        imageData = cxt.getImageData(20 + x, 20 + y, 1, 1);
        if (imageData.data[0] > 170) {
            ps.push({ px: 20 + x, py: 20 + y });
        }
    }
}

然后我们,在每个点上画一个小球,并随机生成X和Y方向的速度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (i in ps) {
    var ball = {
        x: ps[i].px,
        y: ps[i].py,
        r: 2,
        vx: getRandomNumber(-10, 10),
        vy: getRandomNumber(0, 100)
    };
    balls.push(ball);
 
}
cxt.fillStyle = "#fff";
for (i in balls) {
    cxt.beginPath();
    cxt.arc(balls[i].x, balls[i].y, balls[i].r, 0, Math.PI * 2, true);
    cxt.closePath();
    cxt.fill();
 
}

我们再模拟一个重力场和非弹性碰撞,加上Jscex 制作动画效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var dropAsync = eval(Jscex.compile("async", function () {
 
    while (true) {
        if (breakTag) {
            break;
        }
        cxt.fillStyle = "rgba(0, 0, 0, .3)";
        cxt.fillRect(0, 0, canvas.width, canvas.height);
        cxt.fillStyle = "#fff";
 
        for (i in balls) {
            cxt.beginPath();
            cxt.arc(balls[i].x, balls[i].y, balls[i].r, 0, Math.PI * 2, true);
            cxt.closePath();
            cxt.fill();
            balls[i].y += balls[i].vy * cyc / 1000;
            balls[i].x += balls[i].vx * cyc / 1000;
            if (balls[i].r + balls[i].y >= canvas.height) {
                if (balls[i].vy > 0) {
                    balls[i].vy *= -0.7;
                }
            }
            else {
                balls[i].vy += a;
            }
        }
        $await(Jscex.Async.sleep(cyc));
    }
}))

Text Particle Systems的更多相关文章

  1. Custom Sublime Text Build Systems For Popular Tools And Languages

    Sublime Text is currently the text editor of choice for a number of developers in the open-source co ...

  2. Cesium中级教程8 - Introduction to Particle Systems 粒子系统入门

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ What is a particle system? 什么是粒子 ...

  3. 粒子系统模块(Particle System Modules40)

    粒子系统模块(Particle System Modules40) 粒子系统模块(忍者飞镖) 粒子系统(忍者飞镖)(Particle System (Shuriken)) 用模块描述粒子一段时间内的行 ...

  4. Particle Playground 3.03 - 粒子特效王者

    <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op ...

  5. Cesium中级教程9 - Advanced Particle System Effects 高级粒子系统效应

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 要了解粒子系统的基础知识,请参见粒子系统入门教程. Weathe ...

  6. Vectoroid

    Use cases Drawing (sketch, illustrations, cartooning, etc). Diagramming (any sort of chart with obje ...

  7. Qt3D 5.9 and future

    2017-05 http://blog.qt.io/blog/2017/05/24/qt3d/ Qt3D future 5.9 Use Qt Quick or QPainter to render i ...

  8. PhoenixFD插件流体模拟——UI布局【Output】详解

    Liquid Output 流体输出  本文主要讲解Output折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Outp ...

  9. Unity3D用户手册

    Unity Manual 用户手册 Welcome to Unity. 欢迎使用Unity. Unity is made to empower users to create the best int ...

随机推荐

  1. Linux环境进程间通信(一)

    1. 管道概述及相关API应用 1.1 管道相关的关键概念 管道是Linux支持的最初Unix IPC形式之中的一个.具有下面特点: 管道是半双工的,数据仅仅能向一个方向流动.须要两方通信时.须要建立 ...

  2. SpringCloud-服务注册与发现

    这里我们会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的N ...

  3. 微信client内部推荐项目总结

    如今实习的公司在面向企业提供招聘服务领域数一数二,而下半年的产品重点就在于移动端微信招聘项目.而这次内推项目开发属于微信招聘一个分支.     一.内推综述     乐帝之前读<招聘与录用> ...

  4. Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7

    Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception processVob7 1. 1. javascript异常处理机制 ...

  5. C++11新特性实验

    #include <iostream> #include <vector> #include <map> #include <string> #incl ...

  6. Leetcode[81]-Search for a Range

    Link: https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Given a sorted array of integ ...

  7. 进程控制函数(3)-getsid()和setsid()获取当前会话和建立新会话

    pid_t setsid(void) 1.调用进程不能是进程组组长,该进程变成新会话首进程(session header) 2.该进程成为一个新进程组的组长进程. 3.需有root权限(ubuntu不 ...

  8. shell学习笔记之控制结构(三)

    1.if语句 if condition then statements esle statements fi 例: #!/bin/sh echo "Is it morning? Please ...

  9. Logstash日志字段拆分grok

    参考和测试网站:http://grokdebug.herokuapp.com 例如:test-39.dev.abc-inc.com Mon Apr 24 13:53:58 CST 2017 2017- ...

  10. 基于jQuery动画二级下拉导航菜单

    春节回来给大家分享一款基于jQuery动画二级下拉导航菜单.鼠标经过的时候以动画的形式出现二级导航.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id=" ...