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…

Python学习札记(十七) 高级特性3 列表生成式

参考:列表生成式 Note 1.List Comprehensions,即列表生成式,是Python中内置的非常强大的list生成式。 eg.生成一个列表:[1*1, 2*2, ..., 10*10] 使用for...in的方法: #!/usr/bin/env python3L1 []for i in range(1, 1…

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

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

Java学习之String StringBuffer StringBuilder区别

1.String:对象长度是不可变的,是线程安全。 2.StringBuffer:对象长度是可变的,是线程安全。 3.StringBuilder:对象长度是可变,不是线程安全。转载于:https://www.cnblogs.com/michaelShao/p/6372556.html

计算机找不到管理无线网络,电脑wifi密码忘了 并且找不到管理无线网络该怎么处理?...

电脑能连无线网而不能连有线网怎么办你的网卡的TCP/IP协议,设置了自动获取IP地址,然而你的局域网中不存在可以让你的机器得到IP地址的DHCP服务器。所以你的IP地址没有获取到,当然是受限制或无连接。解决方法是,为每个网卡设置一个…

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

html绘制波形图,JS实现波形图

一直想写个波线图,但写出来发现这是点阵组成的,不知道如何把线条弄的特别的平滑,有会的,求留言评论指导。1.[代码][JavaScript]代码Document.container{width:500px;height:500px;border:1px solid #DEDEDE;}.container span{widt…

sql 中on和where的区别

table a(id, type): id type ---------------------------------- 1 1 2 1 3 2 table b(id, class): id class --------------------------------- 1 1 2 2 sql语句1:select a.*, b.* from a left j…

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

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

上传文件插件(plupload)

引入插件&#xff1a; <script src"../../static/js/plupload.full.min.js"></script> /** 上传文件配置* *///配置uploadervar uploader new plupload.Uploader({runtimes: html5,flash,silverlight,html4,browse_button : uploader,url:/delivery/bat…

计算机网络项目实训教程课后答案,计算机网络项目实训教程

摘要&#xff1a;《计算机网络项目实训教程》是专门为Nikon D700相机用户或潜在用户量身定制的实用型图书.将官方手册中抽象的功能描述及没有讲清楚的内容,通过实拍测试及精美照片示例具体地展现出来,特别是精选的摄影玩家实际使用经验与技巧,让您感觉身边时刻有"高手点拨…

如何正确的做事

职场中&#xff0c;常常遇见下列两种人&#xff0c;一种是永远处在无休止忙碌状态&#xff0c;却事倍功半的人&#xff0c;一种是处理工作十拿九稳&#xff0c;经常事半功倍的人。 同样都是做事&#xff0c;造成两种结果的原因究竟是什么呢&#xff1f;答案其实很简单。前者&am…

北大计算机科学与技术专业河南录取分数线,北京大学河南录取分数线|2021北京大学河南分数线|2021年北京大学河南高考分数线|2021年北京大学河南招生计划录取人数...

北京大学2014年在河南省高考录取工作顺利结束。今年北大在豫共录取考生200名&#xff0c;其中全省理科第一名曹林菁、文科投档分第一名齐华瑞和文科实考分第一名齐思涵三位全省最高分考生均选择进入北京大学。今年北大在豫招生无论是总体招生数量还是顶尖高分考生录取&#xff…

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

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

计算机组成原理题库带答案详解,计算机组成原理试试题库(含答案解析) -.doc

Word文档下载可编辑专业技术资料计算机组成原理试题一、单项选择题(从下列各题四个备选答案中选出一个正确答案&#xff0c;并将其代号写在题干前面的括号内。)1.为了缩短指令中某个地址段的位数&#xff0c;有效的方法是采取(C)。A、立即寻址B、变址寻址C、间接寻址 D、寄存器…

51Nod--1100-斜率最大

51Nod--1100-斜率最大 1100 斜率最大平面上有N个点&#xff0c;任意2个点确定一条直线&#xff0c;求出所有这些直线中&#xff0c;斜率最大的那条直线所通过的两个点。 &#xff08;点的编号为1-N&#xff0c;如果有多条直线斜率相等&#xff0c;则输出所有结果&#xff0c;按…

张掖计算机职称考试,甘肃省张掖市2018年3月计算机等级考试公告

&nbsp&nbsp[导读]:甘肃省张掖市2018年3月计算机等级考试甘肃省2018年3月全国计算机等级考试报名时间&#xff1a;2017年12月13日—2018年01月7日&#xff0c;打印准考证时段&#xff1a;2018年3月11—26日甘肃省张掖市2018年3月计算机等级考试公告一、报考条件考生不受…

【多视图几何】TUM 课程 第2章 刚体运动

课程的 YouTube 地址为&#xff1a;https://www.youtube.com/playlist?listPLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 。视频评论区可以找到课程所使用课件与练习题的下载地址。 课程第2章从李群与李代数的角度介绍三维空间的刚体运动。李群即常见的旋转矩阵、变换矩阵&#xff0c;…