使用animejs制作svg形变动画——html点赞特效思路及代码

   平时的页面点赞效果基本都是变色或者缩放以及旋转等等很单一的交互动画。


但是,如果想要做一个灵动的点赞特效,需要好好的构思一下。下面分享一下点赞代码特效的制作思路。

第一步:
既然是点赞,那就真的要大拇指竖起来才叫做点赞,所以在脑海里脑图的雏形就出来了。


大拇指

这个效果涉及到了变形,如果采用帧动画的方式,图片体积大,最主要的是容易丢帧导致动画不流畅。所以选择方案是采用svg标签和animejs来做一个svg的形变效果。让大拇指动起来。

具体方法,在某图网站,或者阿里巴巴图标,下载点赞的AI文件。前几篇写过如何使用AI导出svg文件在这里就不再赘述。留意一下animejs的官网,如果想要做svg的形变,注意:形状必须有 相同的点数 


官网提示

什么是形状  相同的点数  ?

有一些ps或者ai软件经验的同学就会明白,点数就是钢笔工具勾线的锚点

至此,我们来打开下载好的AI源文件,为了保证有相同的点数,我们在改动AI源文件,修改路径的时候保证不要删掉任何一个锚点。

这里单独讲一下导出。需要删除AI源文件里面的描边!切记,因为我们只需要路径。填充属性fill设置为none。如果不这样,生成出来的svg代码太多,而且太乱不好整理。明确目标,我们只需要path路径就可以。


导出注意


AI导出svg须知

我们来看一下,如果不删除AI源文件的路径描边的效果,会有一个很难调整的bug。


继续下面的操作:导出两个svg,第一个是竖起大拇指的。

第一个svg

第二个svg,当然就是要把大拇指给他掰弯,导出一个svg。

钢笔动一动,我们来看一下前后变化的对比,切记,千万不要删除锚点。调整好,导出第二个svg


第二个svg

上代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>点赞特效</title></head><script src="./anime.min.js"></script><style>    .vlike{    width: 60px;    height: 60px;    position: relative;    margin-right: 4px;}</style><body>    <div class="vlike">        <svg version="1.1" x="0px" y="0px" viewBox="0 0 2000 2000" style="enable-background:new 0 0 2000 2000;">        <path class=" path2 likeDou1 " style="fill:none;stroke:#5F5F5F;stroke-width:80;stroke-miterlimit:10;" d="M727.746,1382.976H624.179            c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184            v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544            l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c16.291-69.816,25.589-134.192,15.213-205.129            c-4.157-28.421-21.015-77.216-37.537-100.711c-33.832-48.113-111.054-93.852-157.881-58.26            c-34.111,25.927-21.668,105.331-23.531,156.901c-1.547,42.818-8.152,85.667-19.95,126.857            c-19.74,68.919-88.657,127.887-154.516,156.208"/>        </svg>      </div></body></html><script>var timeline = anime.timeline({    autoplay: true,    direction: "alternate",    loop: true});console.log(timeline)timeline.add({    targets: ".path2",        d: {        value: [            "M727.746,1382.976H624.179 c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184 v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544 l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c49.659-43.498,25.868-19.967,79.358-66.633 c21.644-18.883,58.336-42.446,82.667-58.667c40-26.667,16.831-79.322-52-82c-59.333-2.308-112.667,2.667-157.333,32.667 c-36.446,24.479-121.543,73.489-155.333,106.667c-51.155,50.226-109.701,115.511-175.559,143.833",                    "M727.746,1382.976H624.179 c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184 v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544 l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c16.291-69.816,25.589-134.192,15.213-205.129 c-4.157-28.421-21.015-77.216-37.537-100.711c-33.832-48.113-111.054-93.852-157.881-58.26 c-34.111,25.927-21.668,105.331-23.531,156.901c-1.547,42.818-8.152,85.667-19.95,126.857 c-19.74,68.919-88.657,127.887-154.516,156.208",                    ],        duration: 200,        easing: "easeInOutQuad"    },    delay: 100,})timeline.play()</script>

单纯的一个大拇指竖起的形变动画效果就做好了。


第二步:我们已经成功了70%,如果你实现了上面的代码,循环起来会觉得有点鬼畜。

既然是发自内心的点赞,就得有点力度,这样才显得真诚。

修改脑图,加手腕处的旋转:

旋转

好了很多,可是动画戛然而止比较生硬。

为了让他灵动一些,我们的旋转需要加一个缓冲进去。显得buling~buling~的。

改脑图,加手腕缓冲:


用力赞

好多了,这样动画就很有张力很生动,赞的用力过猛。

第三步:声情并茂

拇指也动起来了,手臂也抬起来了,生动的点赞哪里可以缺少声音。为了表现声音,我们继续修改脑图。

以射线的聚散来体现“声”的效果。


最终脑图设计


除了第一步的形变动画,后来的这两个步骤,完全可以用scc来控制,通过控制时间差来排列动画的顺序。这就需要耐心的花点时间来微调了。

最终效果:


细节按需调整


应用

全部代码如下:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>点赞特效</title></head><script src="./anime.min.js"></script><style>    .vlike{    width: 60px;    height: 60px;    position: relative;    margin-right: 4px;}/* 大拇指动画 */.thumb{    animation: thumb 1s linear infinite;    animation-fill-mode: forwards;    transform-origin: 0% 100%;}@keyframes thumb {    /* 这个动画适合有色logo,突出行为 */    0% {        transform:rotate(35deg);        -ms-transform:rotate(35deg);    /* IE 9 */        -moz-transform:rotate(35deg);   /* Firefox */        -webkit-transform:rotate(35deg); /* Safari 和 Chrome */        -o-transform:rotate(35deg);     /* Opera */    }    40% {        transform:rotate(-6deg);        -ms-transform:rotate(-6deg);    /* IE 9 */        -moz-transform:rotate(-6deg);   /* Firefox */        -webkit-transform:rotate(-6deg); /* Safari 和 Chrome */        -o-transform:rotate(-6deg);     /* Opera */    }    60% {        transform:rotate(3deg);        -ms-transform:rotate(3deg);     /* IE 9 */        -moz-transform:rotate(3deg);    /* Firefox */        -webkit-transform:rotate(3deg); /* Safari 和 Chrome */        -o-transform:rotate(3deg);  /* Opera */    }    100% {        transform:rotate(0deg);        -ms-transform:rotate(0deg);     /* IE 9 */        -moz-transform:rotate(0deg);    /* Firefox */        -webkit-transform:rotate(0deg); /* Safari 和 Chrome */        -o-transform:rotate(0deg);  /* Opera */    }}.light>path {        stroke-dasharray: 600;        stroke-dashoffset: 1200;        /* animation: dash 3s linear infinite; */        animation: light 1s linear infinite;        animation-fill-mode: forwards;        /* 填充的透明度 */        fill-opacity:0;        /* 描边画笔是圆头 */        stroke-linecap:'round';        /* 描边画笔拐角是圆头 */        stroke-linejoin:'round';        opacity: 1;    }    @keyframes light {        /* 这个动画适合有色logo,突出行为 */        0% {            opacity: 0;            stroke-dashoffset: 1200;        }        59%{            opacity: 0;        }        60% {            opacity: 1;        }        99% {            stroke-dashoffset: 0;            opacity: 1;        }        100%{            opacity: 0;        }    }</style><body>    <div class="vlike">        <svg version="1.1" x="0px" y="0px" viewBox="0 0 2000 2000" style="enable-background:new 0 0 2000 2000;">        <path class=" path2 thumb " style="fill:none;stroke:#5F5F5F;stroke-width:80;stroke-miterlimit:10;" d="M727.746,1382.976H624.179            c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184            v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544            l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c16.291-69.816,25.589-134.192,15.213-205.129            c-4.157-28.421-21.015-77.216-37.537-100.711c-33.832-48.113-111.054-93.852-157.881-58.26            c-34.111,25.927-21.668,105.331-23.531,156.901c-1.547,42.818-8.152,85.667-19.95,126.857            c-19.74,68.919-88.657,127.887-154.516,156.208"/>        <g class=" light ">            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M1309.577,305h324.092"/>            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M1309.577,375.23l297.235,129.178"/>            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M1299.133,209.163L1597.555,82.75"/>            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M894.004,301.197H569.912"/>            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M903.854,210.545L606.619,81.367"/>            <path style="fill:none;stroke:#5F5F5F;stroke-width:50;stroke-miterlimit:10;" d="M904.447,380.061L606.026,506.474"/>        </g>        </svg>      </div></body></html><script>var timeline = anime.timeline({    autoplay: true,    // direction: "alternate",    loop: true});timeline.add({    targets: ".path2",        d: {        value: [            "M727.746,1382.976H624.179 c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184 v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544 l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c49.659-43.498,25.868-19.967,79.358-66.633 c21.644-18.883,58.336-42.446,82.667-58.667c40-26.667,16.831-79.322-52-82c-59.333-2.308-112.667,2.667-157.333,32.667 c-36.446,24.479-121.543,73.489-155.333,106.667c-51.155,50.226-109.701,115.511-175.559,143.833",                    "M727.746,1382.976H624.179 c-52.351,0-95.184-42.833-95.184-95.184V859.15c0-52.351,42.833-95.184,95.184-95.184h103.567c52.351,0,95.184,42.833,95.184,95.184 v428.642C822.93,1340.143,780.097,1382.976,727.746,1382.976z M1033.08,1382.976h324.092c80.729,0,147.455-62.951,152.15-143.544 l23.508-403.49c3.087-52.982-39.047-97.642-92.119-97.642h-217.735c16.291-69.816,25.589-134.192,15.213-205.129 c-4.157-28.421-21.015-77.216-37.537-100.711c-33.832-48.113-111.054-93.852-157.881-58.26 c-34.111,25.927-21.668,105.331-23.531,156.901c-1.547,42.818-8.152,85.667-19.95,126.857 c-19.74,68.919-88.657,127.887-154.516,156.208",                    ],        duration: 200,        easing: "easeInOutQuad"    },    delay: 300,    endDelay:500,})timeline.play()</script>

这就是整个效果的全部代码。

动画细节方面   按需调整。

记得要   多动手点赞哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容