使用wheelnav.js构建酷炫的动态导航菜单

目录

前言

一、WheelNav是什么

1、项目地址

2、关于开源协议

3、相关目录介绍

二、如何使用wheelnav.js

1、新建html页面

2、设置style样式

 3、创建展示元素实现动态导航

三、参数即方法介绍

1、参数列表

2、运行方法

3、实际成果

四、总结 


前言

        用户体验永远是一个值得探讨的问题,同时也是应该在平时的研发工作工作中作为重点关注的地方。使用习惯,界面的布局,用户点击操作的系统反应情况,都会给使用者带来很大的冲击。关于用户体验的设计,尤其以吸引用户,在应用上做更多的停留。需要我们的界面设计者花更多的心思。本文无意于过多的讲解如何进行用户体验的设计。用户体验只是我们所有的工程师共同去努力提升。

        上图是一个非常有趣的百科历史类的网站全历史,这里的关系图谱是动态支持旋转的,非常有意思。根据人物不同的维度,比如以上述的历史人物詹天佑为例,从人物的7个方面去描述,分别包括成就、友情、工作、地点、影响、经历、归属。这相当于人物的7个方面,就像知识图谱中的一些关系,更妙的是,在功能界面上,用户可以在选择不同的维度之后,右边的界面会跟随左边的维度来自动切换,完全是一种动态的导航菜单。

        本文即在上述的场景中,主要介绍一种基于SVG的web动态导航组件。通过这个组件可以实现很多丰富酷炫的效果。首先介绍这款wheelnav.js的相关知识,然后结合代码讲解如何在html页面中创建其对象,接着讲解wheelnav的一些属性和方法,最后给出基于wheelnav的实际成果。如果您目前也有类似的需求,不妨来这里看看,或许能提供一些参考。

一、WheelNav是什么

        wheelnav.js 是一个基于 SVG 的动态导航菜单组件。它可以是一个派菜单(径向菜单,循环菜单),选项卡导航,自菜单,选项按钮,复选框等等。

        使用wheelnav可以实现以下效果:

        (1)创建圆形导航:轻松地创建一个基于圆形的导航菜单,其中每个菜单项都是圆形上的一个点或扇区。

        (2)高度可定制:自定义每个菜单项的颜色、形状、大小、位置、标签、工具提示等。
        (3)交互性:添加点击、悬停和拖动事件,以便用户与导航菜单进行交互。

        (4)动画效果:为菜单项添加动画效果,如渐变、旋转、缩放等,以增强用户体验。

        (5)响应式设计:调整导航菜单以适应不同屏幕尺寸和设备类型,确保在各种设备上都能良好地显示和工作。

        (6)集成应用:由于 wheelnav.js 是一个轻量级的库,因此可以轻松地集成到现有的 HTML、CSS 和 JavaScript 项目中。

1、项目地址

        本节将介绍这个库的开源地址。如果大家可以正常访问到github的话,可以在github中找到其源码,github源码地址。如果访问不是很流程,大家在国内的gitee上访问也是可以的。也有技术人员在上面会自动同步相应的库。相关资源可以问问度娘。下面以github为例,说明:

2、关于开源协议

        开源协议是用于规范使用开源项目的一种协议,因此我们在使用开源项目的时候一定要非常注意,作为一个技术人,要尊重作者,尊重开源,把生态圈共同维护好。wheelnav采用的是宽松的MIT协议,对使用方没有任何限制。

The MIT License (MIT)

Copyright (c) 2014-2021 Gábor Berkesi (https://softwaretailoring.net)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

3、相关目录介绍

        把上面的开源项目clone到本地之后,打开目录可以看到以下信息:

        其中,在这个文件夹下面包含了js脚本文件、css样式文件以及一些实例程序,还有一些对于工程的配套说明文件。 这里不再进行赘述。下面结合源码对其实现进行讲解。

二、如何使用wheelnav.js

        在我们将相关的源码下载到本地之后,即将开始我们的学习之旅。在这个过程当中,我们将学会如何创建一个动态的导航按钮,以及实现具体的切换效果。掌握一些基础的参数设置方法。

1、新建html页面

        作为一款前端的javascript组件,要想在界面上展现出来。一定少不了web组件,也就是html的支持。因此在进行wheelnav组件的使用之前,必须要创建一个html界面。关键代码如下:

<!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">
    <meta name="description" content="Welcome by wheelnav.js">
    <meta name="author" content="gabor.berkesi@softwaretailoring.net">
    <link rel="shortcut icon" href="https://wheelnavjs.softwaretailoring.net/wheelnav_favicon.png">
    <title>wheelnav.js - 欢迎使用</title>
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script type="text/javascript" src="raphael.min.js"></script>
    <script type="text/javascript" src="raphael.icons.min.js"></script>
	<!-- 
    <script type="text/javascript" src="wheelnav.min.js"></script>
	-->
	<script type="text/javascript" src="wheelnav.js"></script>
</head>
<body>
    <header>
        <p>
            欢迎使用 <a href="https://wheelnavjs.softwaretailoring.net" target="_blank">wheelnav.js</a>
        </p>
    </header>
    <div id="wheelDiv"></div>
    <footer>
        <p>&copy; 2014-2021 <a href="https://softwaretailoring.net" target="_blank">softwaretailoring.net</a></p>
    </footer>
</body>
</html>

2、设置style样式

        在定义好了html展现要素之后,还要设置具体的样式,让界面变得更加好看。关键代码如下:

<style>
        body {
            background-color: #E7E7E7;
            font-family: Helvetica, Arial, sans-serif;
        }
        header {
            font-size: x-large;
            text-align: center;
            background-color: #555;
            color: #ddd;
            padding: 5px;
            font-family: Helvetica, sans-serif;
            margin-bottom: 50px;
        }
        header a {
            background-color: #ddd;
            color: #555;
            text-decoration: none;
            padding: 0 3px 0 3px;
        }
       header a:hover {
            background-color: #555;
            color: #ddd;
            text-decoration: underline;
        }
        footer {
            text-align: center;
            background-color: #555;
            color: #ddd;
            padding: 5px;
            margin-top: 50px;
        }

        footer a {
            background-color: #ddd;
            color: #555;
            text-decoration: none;
            padding: 0 3px 0 3px;
        }

        footer a:hover {
            background-color: #555;
            color: #ddd;
            text-decoration: underline;
        }
        #wheelDiv {
            height: 400px;
            width: 400px;
            margin: auto;
        }
        #wheelDiv>svg {
            height: 100%;
            width: 100%;
        }
        @media (max-width: 600px) {
            #wheelDiv {
                height: 350px;
                width: 350px;
            }
        }
        @media (max-width: 400px) {
            #wheelDiv {
                height: 300px;
                width: 300px;
            }
        }
        /* Insert generated CSS code from here -> https://pmg.softwaretailoring.net */
    </style>

 3、创建展示元素实现动态导航

        在引入了wheelnav组件之后,除了创建展示元素,设置渲染属性,还需要将wheelnav对象出来。下面以代码的形式主要讲解如何创建wheelnav组件。

<script type="text/javascript">
        window.onload = function () {
            var wheel = new wheelnav("wheelDiv");
            wheel.titleCurved = true;
            wheel.titleCurvedClockwise = true;
            wheel.createWheel(["主题一", "主题二", "主题三", icon.fave, "主题四", "主题五"]);
            wheel.navigateWheel(1);
        };
</script>

        这里通过new wheelnav("wheelDiv")。将动态组件绑定到div中。然后设置它的参数,每个导航菜单还有设置默认的菜单项。以上即完成了最简单的示例。你应该掌握它的最基本用法。

三、参数即方法介绍

        为了方便大家了解wheelnav组件,这里将对这个组件的参数的方法进行相应的介绍。首先介绍这款组件的基本参数,然后再介绍这款组件的一些方法。

1、参数列表

        关于wheelnav组件的参数,可以在wheelnav.js这个组件的源码中找到。可以使用文本工具看一下源码:

    this.holderId = "wheel";
    var holderDiv = document.getElementById(divId);
    //Prepare raphael object and set the width
    var canvasWidth;
    var clearContent = true;
    if (raphael === undefined ||
    }
    else {
        //The divId parameter has to be the identifier of the wheelnav in this case.
        this.raphael = raphael;
        canvasWidth = this.raphael.width;
        clearContent = false;
    }
    //Public properties
    this.centerX = canvasWidth / 2;
    this.centerY = canvasWidth / 2;
    this.wheelRadius = canvasWidth / 2;
    this.navAngle = 0;
    this.sliceAngle = null;
    this.titleRotateAngle = null;
    this.titleCurved = false;
    this.titleCurvedClockwise = null;
    this.titleCurvedByRotateAngle = false;
    this.initTitleRotate = false;
    this.selectedNavItemIndex = 0;
    this.hoverEnable = true;
    this.hoveredToFront = true;

    this.navItemCount = 0;
    this.navItemCountLabeled = false;
    this.navItemCountLabelOffset = 0;
    this.navItems = [];
    this.navItemsEnabled = true;
    this.animateFinishFunction = null;

    // These settings are useful when navItem.sliceAngle < 360 / this.navItemCount
    this.navItemsContinuous = false; 
    this.navItemsCentered = true; // This is reasoned when this.navItemsContinuous = false;

    this.colors = colorpalette.defaultpalette;
    this.titleSpreadScale = null;

    //Spreader settings
    this.spreaderEnable = false;
    this.spreaderRadius = 20;
    this.spreaderStartAngle = 0;
    this.spreaderOutTitleHeight = null;

    //Percents
    this.minPercent = 0.01;
    this.maxPercent = 1;
    this.initPercent = 1;

    //Marker settings
    this.markerEnable = false;
    this.markerPathFunction = markerPath().TriangleMarker;
    this.markerPathCustom = null;

    //Private properties
    this.currentClick = 0;
    this.animateLocked = false;

    //NavItem default settings. These are configurable between initWheel() and createWheel().
    this.slicePathAttr = null;
    this.sliceHoverAttr = null;
    this.sliceSelectedAttr = null;
    
    this.titleFont = '100 24px Impact, Charcoal, sans-serif';
    this.titleAttr = null;
    this.titleHoverAttr = null;
    this.titleSelectedAttr = null;
    this.titleSelectedHeight = null;

    this.linePathAttr = null;
    this.lineHoverAttr = null;
    this.lineSelectedAttr = null;

    this.slicePathCustom = null;
    this.sliceClickablePathCustom = null;
    this.sliceSelectedPathCustom = null;
    this.sliceHoverPathCustom = null;
    this.sliceInitPathCustom = null;

    this.sliceTransformCustom = null;
    this.sliceSelectedTransformCustom = null;
    this.sliceHoverTransformCustom = null;
    this.sliceInitTransformCustom = null;

    this.animateeffect = null;
    this.animatetime = null;
    
    this.sliceClickablePathFunction = null;
    this.sliceInitPathFunction = null;
    this.sliceInitTransformFunction = null;

    this.keynavigateEnabled = false;
    this.keynavigateOnlyFocus = false;
    this.keynavigateUpCode = 39; // right arrow
    this.keynavigateUpCodeAlt = 38; // up arrow

    this.parseWheel(holderDiv);

        参数比较多,请大家结合源码进行设置。组件的参数从类别上来分,主要分为以下几种类型:

序号类别说明
1holderId基础配置,元素唯一
2//Prepare raphael object and set the width基础宽度设置
3//Public properties公共属性,如位置等
4//Spreader settings应该是一些动画的设置
5//Percents组件百分比
6//Marker settings标记设置

        除了以上的设置,组件还有其他的一些设置,结合帮助文档可以做出更加符合需要的组件。

2、运行方法

        我们通过源码调试的方式来讲解实际的方法运行。通过F12打开调试界面:

         这里首先开始进行公共属性的设置,最后根据属性来创建实际的动画对象:

        根据我们设置的数据项创建平均分配动态菜单的方法:

         这里将循环每个数据,动态创建子组件,最后返回wheelnav对象同时在页面上展示出来。这样我们就完成了wheelnav组件的创建以及页面集成使用。

3、实际成果

        wheelnav.js还可以实现更多有意思的效果。下面给出几个实际的例子,大家可以发挥自己的聪明才智,将wheelnav集成到自己的项目中:

四、总结 

        以上就是本文的主要内容,本文主要介绍一种基于SVG的web动态导航组件。通过这个组件可以实现很多丰富酷炫的效果。首先介绍这款wheelnav.js的相关知识,然后结合代码讲解如何在html页面中创建其对象,接着讲解wheelnav的一些属性和方法,最后给出基于wheelnav的实际成果。如果您目前也有类似的需求,不妨来这里看看,或许能提供一些参考。行文仓促,难免有不足之处,如有不当之处,还请各位专家朋友在评论区留言批评指正,不胜感激。下次我们讲讲在GIS当中怎么样集成这款组件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『 Linux 』目录与软硬链接 (万字详解)

文章目录 如何理解目录目录项 目录中的权限问题根目录Dentry缓存文件的增删改查与文件系统关系软硬链接软链接硬链接 如何理解目录 目录是一个文件存在其对应独立的Inode; $ stat dirFile: ‘dir’Size: 4096 Blocks: 8 IO Block: 4096 directory Device: f…

栈的最小值

题目链接 栈的最小值 题目描述 注意点 执行push、pop和min操作的时间复杂度必须为O(1) 解答思路 使用两个栈&#xff0c;一个栈deque存储栈中对应的元素值&#xff0c;另一个栈minDeque存储当前栈中所有元素的最小值&#xff0c;当执行push(int x)操作&#xff0c;deque直…

【乐吾乐3D可视化组态编辑器】数据接入

数据接入 本文为您介绍3D数据接入功能&#xff0c;数据接入功能分为三个步骤&#xff1a;数据订阅、数据集管理、数据绑定 编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 数据订阅 乐吾乐3D组态数据管理功能由次顶部工具栏中按钮数据管理打开。 在新弹窗中选择数据订阅…

白银票据~

一. 白银票据的原理 白银票据就伪造ST票据&#xff0c; kerberoasting是破解ST票据中的服务用户hash值&#xff0c;有以下区别&#xff1a; 白银票据&#xff1a;伪造的ST使用的是机器用户的Hash值 Kerberoasting:破解的是ST的域用户的hash值二. 白银票据的利用条件 1.域名 …

基于线性回归根据饮食习惯和身体状况估计肥胖水平

目录 1. 作者介绍2&#xff0e;饮食习惯与身体状况数据集介绍3&#xff0e;实验步骤3.1 数据分析3.2 可视化处理数据3.3 导入线性回归模型进行训练3.4 预测结果3.5 完整代码3.5.1 数据分析3.5.2 模型评估 参考文献 1. 作者介绍 刘欢&#xff0c;女&#xff0c;西安工程大学电子…

MySQL经典练习50题(上)(解析版)

所有笔记、生活分享首发于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#xff0c;请访问本篇笔记 MySQL经典练习50题&#xff08;上&#xff09; 创建数据库和表 -- 建 表 -- 学 生 表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(2…

ffmpeg视频编码原理和实战-(2)视频帧的创建和编码packet压缩

源文件&#xff1a; #include <iostream> using namespace std; extern "C" { //指定函数是c语言函数&#xff0c;函数名不包含重载标注 //引用ffmpeg头文件 #include <libavcodec/avcodec.h> } //预处理指令导入库 #pragma comment(lib,"avcodec.…

【linux】swap学习

在 Linux 系统中&#xff0c;swap 是一种用于扩展系统内存的技术。当物理内存&#xff08;RAM&#xff09;不足时&#xff0c;系统会将一部分不常用的内存数据移至 swap 空间&#xff0c;从而释放物理内存供其他程序使用。Swap 空间可以是一个单独的分区&#xff08;swap 分区&…

今日份动态规划学习(二维01背包+01背包变形)

目录 P1877 [HAOI2012] 音量调节 P1877 [HAOI2012] 音量调节 题解&#xff1a;一个入门级别的01背包问题&#xff0c;首先就是为什么能看出是01背包&#xff0c;因为只有两种状态&#xff0c;要不增大音量&#xff0c;要不减小音量&#xff0c;和01背包的选与不选非常近似。但…

学习笔记——IP地址网络协议——IPV4地址配置与应用

五、IPV4地址配置与应用 1、IP地址的基础配置命令 2、案例&#xff1a;配置接口IP地址 3、Loopback接口 Loopback接口∶用户需要一个接口状态永远是Up的接口的IP地址时&#xff0c;可以选择Loopback接口的IP地址。 Loopback接口一旦被创建&#xff0c;其物理状态和链路协议状…

消防认证-饰面型防火涂料

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

【Linux】进程(5):命令行参数

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;5&#xff09;&#xff1a;命令行参数&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 &#xff08;A&#xff09;为什么要有命令…

JavaWeb基础(JQuery,XML及解析)

这个阶段有点拖沓了&#xff0c;因为事情比较多&#xff0c;耽搁了一段时间&#xff0c;学习的主要内容为JQuery和XML&#xff0c;因为vue的出现&#xff0c;JQuery技术现在已经不流行了&#xff0c;但是不流行不代表我不会&#xff0c;JQuery最最最最核心的就是他的$()核心函数…

阿里云sls 采集日志安装记录

参考阿里云给的安装文档 阿里云安装Logtail组件 注意这里&#xff0c;选择地域&#xff0c;是中国地域选中国&#xff0c;海外选海外即可 按照文档继续下去 修改配置文件./alibaba-cloud-log-all/values.yaml 所有的操作完成后&#xff0c;去控制台配置 以上操作的前提是…

数据可视化---使用matplotlib绘制高级图表(2)

题目一&#xff1a;绘制人口金字塔图 编写程序。根据第8.6&#xff0c;绘制如下图的人口金字塔图。 运行代码&#xff1a; #绘制人口金字塔图 import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] SimHei plt.rcParams[…

交互式流程图组件DHTMLX Diagram v6.0 - 拥有更灵活的高度可定制功能

DHTMLX Diagram库允许用几行代码构建JavaScript流程图&#xff0c;通过自动布局和实时编辑器&#xff0c;它可以更容易地将复杂数据可视化到一个整洁的层次结构中。 DHTMLX Diagram v6.0版本发布&#xff0c;带来了众多令人兴奋的新功能和改进&#xff0c;使得这个JavaScript图…

【SITS_CC】卫星图像时间序列的变化字幕(IEEE GRSL)

摘要 Satellite images time series (SITS) 提供了一种有效的方法来同时获取地球上观测区域的时间和空间信息。然而&#xff0c;传统的遥感CD方法的输出是二进制图或语义变化图&#xff0c;往往难以被最终用户解释&#xff0c;传统的遥感图像变化字幕方法只能描述双时图像。提…

ARM32开发——串口输出

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求串口数据发送串口打印实现复用功能串口发送流程&#xff08;了解&#xff09;串口的标志位关心的内容 需求 串口循环输出内容到…

AI生成PPT:一键式演示文稿制作的秘诀

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

java 原生http服务器 测试JS前端ajax访问实现跨域传post数据

后端 java eclipse 字节流转字符 package Httpv3;import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;import java.io.IOException; import java.i…