GithubHelp home page GithubHelp logo

cmiscm / leonsans Goto Github PK

View Code? Open in Web Editor NEW
10.2K 140.0 535.0 11.23 MB

Leon Sans is a geometric sans-serif typeface made with code in 2019 by Jongmin Kim.

Home Page: https://leon-kim.com/

License: MIT License

JavaScript 100.00%

leonsans's Introduction

Leon Sans

Leon Sans is a geometric sans-serif typeface made with code in 2019 by Jongmin Kim. It allows to change font weight dynamically and to create custom animations, effects or shapes in the Canvas element of HTML5. He designed the font to celebrate his newborn baby Leon.

There are live examples at https://leon-kim.com/examples/

And website at https://leon-kim.com/

Video Label

uppercase

lowercase

number

latin upper

latin lower

What is special?

The font is made with code, it has coordinate values of the drawing points for each glyph. With the coordinate values, you can create custom shapes, effects or animations.

Drawing animation

Weight change

Wave

Metaball

Plant

Colorful

Color pattern

Usage

Download the minified js file in dist folder and include it in your html.

<script src="js/leon.js"></script>

Generate LeonSans and draw it in the Canvas element of HTML5.

let leon, canvas, ctx;

const sw = 800;
const sh = 600;
const pixelRatio = 2;

function init() {
    canvas = document.createElement('canvas');
    document.body.appendChild(canvas);
    ctx = canvas.getContext("2d");

    canvas.width = sw * pixelRatio;
    canvas.height = sh * pixelRatio;
    canvas.style.width = sw + 'px';
    canvas.style.height = sh + 'px';
    ctx.scale(pixelRatio, pixelRatio);

    leon = new LeonSans({
        text: 'The quick brown\nfox jumps over\nthe lazy dog',
        color: ['#000000'],
        size: 80,
        weight: 200
    });

    requestAnimationFrame(animate);
}

function animate(t) {
    requestAnimationFrame(animate);

    ctx.clearRect(0, 0, sw, sh);

    const x = (sw - leon.rect.w) / 2;
    const y = (sh - leon.rect.h) / 2;
    leon.position(x, y);

    leon.draw(ctx);
}

window.onload = () => {
    init();
};

For the drawing animation, include TweenMax (JS animation library) in your html.

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js"></script>

And update all the drawing values from 0 to 1

let i, total = leon.drawing.length;
for (i = 0; i < total; i++) {
    TweenMax.fromTo(leon.drawing[i], 1.6, {
        value: 0
    }, {
        delay: i * 0.05,
        value: 1,
        ease: Power4.easeOut
    });
}

Option list

Name Type Description
text string The text that needs to be shown.
size integer The size of the text.
weight number The weight of the font: 1 - 900. [Default: 1]
color array The colors of each characters. [Default: ['#000000']]
colorful array The colors for colorful effect. [Default: ['#c5d73f', '#9d529c', '#49a9db', '#fec330', '#5eb96e', '#fc5356', '#f38f31']]
tracking integer The spacing between the characters of a block of text. [Default: 0]
leading integer The distance between each line of text. [Default: 0]
align string How the text content of the element is horizontally aligned: left, center, right. [Default: left]
pathGap number The gap between each coordinate of the points on a line of each character: 0 - 1. [Default: 0.5]
amplitude number The amplitude of the wave effect: 0 - 1. [Default: 0.5]
maxWidth number The width of the text sentence.
breakWord boolean Words break when reaching the end of a line. [Default: false]
fps number The FPS for the wave effect. [Default: 30]
isPath boolean true to get the coordinate values of the points on a line of each character. [Default: false]
isWave boolean true for the wave effect. [Default: false]

Properties

Name Type Description
lineWidth number The thickness of lines of the character.
scale number The scale of the character. scale is 1 when the font size is 500.
drawing array The drawing object values for each character. 0 is the beginning of the animation, 1 is the end of the animation state.
data array An object of the raw data for the text.
paths array The coordinate values of the points on a line of each character.
drawingPaths array The coordinate values of the points on a line of each character to draw the drawing animation in WebGL. It has 1px distance of each path.
wavePaths array The coordinate values of the points on a line for the wave effect.
rect Object The size of the text and its position: {x: x position, y: y position, w: width, h: height}.

Methods

Name Description
on() Add update event.
off() Remove update event.
position(x, y) Set the position of the text.
updateDrawingPaths() Update paths for drawing in WebGL (PIXI.js). It's very expensive, only call when it needs.
drawPixi(graphics) Draw text in WebGL with PIXI.js.
draw(ctx) Draw text in the Canvas element.
drawColorful(ctx) Draw the colorful effect.
wave(ctx, t) Draw the wave effect.
pattern(ctx, w, h) Draw rectangle shapes at each path point
grid(ctx) Draw grid for each type.
point(ctx) Draw circles at each drawing point and lines for each type.
box(ctx) Draw outline box for the text.
reset() Reset all the values.
dispose() Dispose.

leonsans's People

Contributors

0xflotus avatar cmiscm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

leonsans's Issues

Deleting/backspacing text

Is there any implementation to reverse the animation as though the text is being deleted one character at a time?

Add Lithuanian letters

Very cool project. Can you please add the missing Lithuanian diacritics. All of them are these:

Ą Č Ę Ė Į Š Ų Ū Ž ą č ę ė į š ų ū ž

Demo not working

When I add the simple example under Usage in the README, I see the below image (without animation):
Screen Shot 2019-08-31 at 4 29 58 PM

Any ideas what might be going wrong? I followed the usage steps exactly 😕

Add some simple Chinese characters...

Awesome project! I love it.
Could you add some simple Chinese character like:

  • 一 二 三 四 五 六 七 八 九 十 王 菲 中 下 上 广 小 大 人 子 之 ...

By the way,could you tell us how to add the characters we want?
Thank you!!

Polish chars

Could you also add Polish chars?
ą, ę, ł, ń, ś, ź, ż,
Ą, Ę, Ł, Ń, Ś, Ź, Ż

Thank you in advance!

Love the demo

Just wanted to tell you,
I ABSOLUTELY love the demo :)

you had put great effort is showcasing it.

👍

Italic?

(slanted)

Great project, thanks!

Great :)

Hey Kim

Congratulations on Leon and this is a beautiful font and a beautiful way to celebrate the birth of your son :)

TTF version?

I appreciate the whole point of this font is that it's dynamically generated, but we're curious about using it as a font for a brand. In this instance, we'd need to be able to use it in an old fashioned Adobe scenario - is there a way to output a traditional TTF / OTF etc file?

Add character: ấ, ầ, ậ,....

I love this font. But this font does not have enough characters.
Please add character:

  • ả, ã, ạ
  • â, ấ, ầ, ậ
  • ắ, ằ, ặ, ẳ, ẵ
  • ọ, ỏ
  • ố, ồ, ộ
  • ơ, ớ, ờ, ợ
  • ụ, ủ, ũ
  • ứ, ừ, ự
  • ẹ, ẽ, ẻ
  • ề, ế, ể, ễ, ệ
  • ỉ, ĩ, ị
  • ỳ, ỷ, ỹ, ỵ

Thank you !

Responsive size

Hello,
is it possible to bind it to the viewport for a responsive size of the canvas/font?

Roalkege

Change capital M to be above baseline

An amazing font is Leon Sans but it lacks some key features of quality minimalistic fonts. The best thing about the font would be the curved capital G but the capital M kind of holds it back a bit. If the M was above the baseline this font would be competing with the top fonts on the internet!

Metaball?

I really like the look of metaball, but can't figure out where it gets is unique "burnt-in" look. I tried to figure it out from the code, but all I see are standard weight, leading, tracking, etc, nothing that would account for the unique shape of the characters (ie, larger at the joints). Can you explain this one a little? Thanks.

PS, reminds me a little of averia.

Ö Ä Ü ß ? :)

A really beautiful font!

Would be happy to use it but I am missing umlauts. Any plans to add that?

Cheers!

Full example code

Love this project

But I'm having a hard time getting the same responsiveness as on leon-kim.com

Could you share the code for that here?

How to animate text weight

Amazing work here! Sorry to ask this as it's not an issue with the project but my own question for working with Leon Sans.

How can I create an animated weight change as shown in the README so that each letter becomes thicker after the previous one?

I just can't figure it out and I don't know where else to ask. Thanks!

Output to SVG

Is there any option planned to output the drawn characters to SVG? (I don't mean drawing the canvas and then exporting to SVG, but exporting to SVG vector data).

Any insights?

Esperanto

Hello, nice project!

Is there any chance in the future to add support for the Esperanto letters?

They are only six on top of the common latin alphabet: ĉ ĝ ĥ ĵ ŝ ŭ

generateCanvas is not defined

When I open examples directory on my server

it emits below errors

GET http://localhost:8888/leonsans/examples/js/util.js 404 (Not Found)
Uncaught ReferenceError: generateCanvas is not defined
    at init (all.html:35)
    at window.onload (all.html:106)

I think it should have js/util.js but the server can't find it

Is there the other way to assign js/util.js path? or it just missed a thing?

npm module?

Hi, love this font/library. Great work.

Just wondering if there would be a way to distribute this on npm? This way it can be installed via the command line (npm install) and included as a direct dependency in more complex projects (for example, a game engine could include this as a built-in font).

Cheers!

Inclusive design

We’ve been here before with great tools like this but they always tend to miss out ways to give a similar or even back up experience for users that are using assisted technologies. Is there anyway that you can add a layer to the framework that will provide this or will it be up us to provide that in some other way?

NPM package?

Awesome project.Any plans to publish it as NPM package?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.