html5列表菜单特效,HTML5 SVG汉堡包菜单按钮分段动画特效

这是一款效果非常炫酷的HTML5 SVG汉堡包菜单按钮分段动画特效。该菜单按钮特效在用户点击汉堡包按钮时,按钮会分割为多段,并旋转变形为关闭按钮的状态。当再次点击该按钮时,它会逆向变形为汉堡包图标。

ae36eab174f5e5b0ec2545c7047902f0.gif

该特效是基于Segment.js插件(一款可以只绘制和动画某一段SVG路径的js插件)来制作的。

使用方法

绘制SVG路径

这是一个非常复杂的路径动画过程,如果我们一帧帧的来分析动画,就可以分别绘制出每一条路径。路径动画像下图的样子:

e068f7e7e7322b25d8911e135144da7e.png

根据上面的图我们可以得到类似下面的SVG代码。

为了便于为菜单按钮添加样式及在JavaScript中调用,可以给SVG一个包裹元素,并设置其class和ID。

CSS样式

// The wrapper was defined with a fixed width and height

// Note, that the pointer-events property is set to 'none'.

// We don't need any pointer events in the entire element.

.menu-icon-wrapper{

position: relative;

display: inline-block;

width: 34px;

height: 34px;

pointer-events: none;

transition: 0.1s;

}

// To perform the scaled transform for the second demo

.menu-icon-wrapper.scaled{

transform: scale(0.5);

}

// Adjusting the position of the SVG element

.menu-icon-wrapper svg{

position: absolute;

top: -33px;

left: -33px;

}

// Defining the styles for the path elements

.menu-icon-wrapper svg path{

stroke: #fff;

stroke-width: 6px;

stroke-linecap: round;

fill: transparent;

}

// Setting the pointer-events property to 'auto',

// and allowing only events for the trigger element

.menu-icon-wrapper .menu-icon-trigger{

position: relative;

width: 100%;

height: 100%;

cursor: pointer;

pointer-events: auto;

background: none;

border: none;

margin: 0;

padding: 0;

}

SVG动画

为了使汉堡包图标的上下两条线产生动画效果,首先需要初始化它的begin和end值。关于Segment.js的用法可以参考这里。

var pathA = document.getElementById('pathA'),

pathC = document.getElementById('pathC'),

segmentA = new Segment(pathA, 8, 32),

segmentC = new Segment(pathC, 8, 32);

接下来是两个动画函数,它们用于上下两条线条的动画。第一个以线性方式动画路径,在其回调函数中调用第二个动画函数。

// Linear section, with a callback to the next

function inAC(s) { s.draw('80% - 24', '80%', 0.3, {delay: 0.1, callback: function(){ inAC2(s) }}); }

// Elastic section, using elastic-out easing function

function inAC2(s) { s.draw('100% - 54.5', '100% - 30.5', 0.6, {easing: ease.ease('elastic-out', 1, 0.3)}); }

// Running the animations

inAC(segmentA); // top bar

inAC(segmentC); // bottom bar

对于中间的线条只需要重复以上步骤。

// Initialize

var pathB = document.getElementById('pathB'),

segmentB = new Segment(pathB, 8, 32);

// Expand the bar a bit

function inB(s) { s.draw(8 - 6, 32 + 6, 0.1, {callback: function(){ inB2(s) }}); }

// Reduce with a bounce effect

function inB2(s) { s.draw(8 + 12, 32 - 12, 0.3, {easing: ease.ease('bounce-out', 1, 0.3)}); }

// Run the animation

inB(segmentB);

以下是将按钮恢复到汉堡包状态的代码。

function outAC(s) { s.draw('90% - 24', '90%', 0.1, {easing: ease.ease('elastic-in', 1, 0.3), callback: function(){ outAC2(s) }}); }

function outAC2(s) { s.draw('20% - 24', '20%', 0.3, {callback: function(){ outAC3(s) }}); }

function outAC3(s) { s.draw(8, 32, 0.7, {easing: ease.ease('elastic-out', 1, 0.3)}); }

function outB(s) { s.draw(8, 32, 0.7, {delay: 0.1, easing: ease.ease('elastic-out', 2, 0.4)}); }

// Run the animations

outAC(segmentA);

outB(segmentB);

outAC(segmentC);

最后,为了在点击图标的时候开始执行动画,可以向下面这样设置事件监听。

var trigger = document.getElementById('menu-icon-trigger'),

toCloseIcon = true;

trigger.onclick = function() {

if (toCloseIcon) {

inAC(segmentA);

inB(segmentB);

inAC(segmentC);

} else {

outAC(segmentA);

outB(segmentB);

outAC(segmentC);

}

toCloseIcon = !toCloseIcon;

};

浏览器兼容

上面的代码可以非常好的完成SVG汉堡包图标的动画,但是它们在各个浏览器中的表现有一些不一致。为了解决这个问题,可以简单的将SVG放大10倍,代码如下:

然后通过CSS来将SVG缩小10倍。

.menu-icon-wrapper svg {

transform: scale(0.1);

transform-origin: 0 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机选修课学什么,计算机专业都学什么 主要课程有什么

计算机专业的主要学习内容有什么呢,都开设哪些课程呢,下面小编为大家提供计算机专业主要学习内容,仅供大家参考。计算机专业主要学习内容一、数学类主要课程:高等数学、线性代数、离散数学、概率论、数理统计二、语言类主要课程&a…

excel取html文本长度,excel字符长度 怎么计算excel里的字符串的长度

请教:在EXCEL中如何统计字符长度?打开excel文件,确定需要编辑的内容选择功能区的“公式”功能在公式中选择“LEN”功能在text中选择需要编辑的单元格 7、点击“确定” 8、系统自动计算出了单元excel中怎么判断字符串的长度在Excel中可以使用两…

Java虚拟机(JVM)默认字符集详解

Java中对字符串等进行转换字节数组时, 需要根据字符集编码来进行转换, 当不显示的指定字符集编码时(如: "测试".getBytes()), 会使用Charset.defaultCharset()获取到的字符集编码进行转换! 相关代码如下: 上面的代码可以看出, 在JVM中defaultCharset()是在初始化阶段…

计算机本地用户删除后怎么恢复,Default User文件夹被删了怎样恢复

满意答案opposities2013.06.06采纳率:80% 等级:24已帮助:17327人1、开机后出现“Windows 不能加载本地存储的配置文件。此问题的可能原因是安全权限不足或本地配置文件损坏。如果此问题持续存在,请与您的网络管理员联系。倒数3…

08-SSH综合案例:前台用户模块:注册页面的前台JS校验

这个是MyEclipse设置的问题 把设置去掉就没问题了。 你也可以在每一个input后面加个span来显示提示的信息。这些东西也要提交到后台,后台也是要对这些东西进行校验的。转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6377756.html

计算机管理员无法创建密码,找到电脑管理员的密码

轻松找回遗忘的WinXP管理员密码很多“不拘小节”的朋友在使用电脑时,经常是昨天改了Windows XP帐户密码,今天便忘记了内容,把自己锁在“门外”的情况时有发生。对此,大多数朋友只能痛苦的去重新安装系统。其实如果你有以下的条件&…

clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight

clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight是几个困惑了好久的元素属性,趁着有时间整理一下 1. clientWidth 和 clientHeight 网页中的每个元素都具有 clientWidth 和 clientHeight 属性,表示可视区域的宽高&…

API文档工具-Swagger的集成

最近安装了API文档工具swagger,因为Github上已有详细安装教程,且安装过程中没有碰到大的阻碍,所以此文仅对这次安装做一份大致记录 相关网站 Swagger 官方地址:http://swagger.wordnik.com Github安装详解【springmvc集成swagger】…

计算机翻译辅助工具安卓版,计算机辅助翻译软件

OmegaT是一款电脑翻译软件,此软件能够帮助用户对一些机器专业语言进行快速翻译,目前软件支持任何Java的操作系统,用户无需担心系统不支持的问题。另外,软件可以在任意目录中搜索所支持的格式的文件,翻译速度快、准确性…

计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)

二、基本操作题41在考生文件夹下的“Acc1.mdb”数据库中已建立表对象“职工”。试按以下操作要求,完成对表“职工”的编辑修改和操作:(1)将“职工号”字段改名为“编号”,并设置为主键。(2)设置“年龄”字段的有效性规则为“年龄>20”。(3…

情人节引发的血案

首先, 如果你能看到这句话,那我就应该恭喜你,你已经被此文的标题所吸引。不过,千万不要想太多,此文不是什么《今日说法》,但也与法有那么一丁点的关系;此文也不是什么《我们约会吧》&#xff0c…

css 可编辑,如何设置DIV可编辑

「来源: |web前端开发 ID:web_qdkf」如何让一个div变成可编辑状态,比如富文本的输入框就可以用可编辑的div(自定义一个富文本时可用),类似textare。有2种方案可以实现:1是通过contenteditable属性设置为true&#xff0…

Java中的局部变量表及使用jclasslib进行查看

直接上下载地址 jclasslib是一个独立的工具,不是包含在JDK中的工具,需要自己进行下载,下载地址如下: http://downfile.downcc.com/down/JClassLib_windows.zip 什么是局部变量表 在《java中的栈》中我们说到了一个栈帧至少需要包含…

在线学ajax,ajax学习

AJAX:1. 概念: ASynchronous JavaScript And XML异步的JavaScript 和 XML1. 异步和同步:客户端和服务器端相互通信的基础上* 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。* 客户端不需要等待服务器端的响应。在服务器处…

服务器网盘系统怎么装,云服务器上怎么安装操作系统

云服务器上怎么安装操作系统 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(…

Ubuntu 16.04 64位安装YouCompleteMe

之前记录在OneNote上感觉有点乱,而且不适合保存shell,这次重新安装又出问题了,干脆写篇博客记录。 从零开始 1、git(用来下载vim和相关插件) sudo apt-get install git2、cmake(用来编译clang-llvm&#xf…

学大数据找IT十八掌

《IT十八掌大数据内功修炼到企业实战2.0课程》免费自学马拉松计划 1、关于十八掌 学了大数据,还是不敢找工作? 内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最强【大数据云计算】内功修炼系列课程&#xff…

C语言中的小数取整和四舍五入

将小数直接抹掉的取整1自动类型转换 例如 &#xff1a;#include <stdio.h> main() {int a;a2.7;printf("a %d",a); } // a 22强制类型转换例如&#xff1a;#include <stdio.h> main() {printf("%d",(int)3.75); //输出结果为 …

sql exist 优化查询时间

1.非exist&#xff0c;查询需要20多秒 2.使用exist后 3.表连接也能优化 转载于:https://www.cnblogs.com/alamZ/p/6423166.html

LightOJ - 1245 Harmonic Number (II) 求同值区间的和

题目大意&#xff1a;对下列代码进行优化 long long H( int n ) { long long res 0; for( int i 1; i < n; i ) res res n / i; return res;} 题目思路&#xff1a;为了避免超时&#xff0c;要想办法进行优化 以9为例&#xff1a; 9/1 9 9/2 4 9/3 3…