wheelnav.js开发者指南:自定义spreader与marker打造独特导航体验
wheelnav.js开发者指南:自定义spreader与marker打造独特导航体验
【免费下载链接】wheelnavAnimated wheel navigation JavaScript library based on Raphaël.js (SVG/VML). It can be a pie menu (radial menu, circular menu) and many more.项目地址: https://gitcode.com/gh_mirrors/wh/wheelnav
wheelnav.js是一款基于Raphaël.js的动画轮式导航JavaScript库,能够创建饼图菜单(径向菜单、圆形菜单)等多种交互式导航效果。本文将详细介绍如何通过自定义spreader和marker组件,为你的web项目打造独特的导航体验。
了解spreader与marker核心概念
在wheelnav.js中,spreader和marker是构建交互式导航的两个核心组件:
- spreader:用于创建导航项之间的连接区域,支持多种路径样式,如饼图、星形、线条等
- marker:作为导航指示器,用于突出当前选中的菜单项,提供视觉反馈
内置spreader与marker样式展示
wheelnav.js提供了丰富的预设样式,满足不同场景需求:
图1:wheelnav.js提供的交互式轮式导航组件示例,展示了多色分区和图标集成
图2:环形导航样式展示,包含中心空白区域和多色分区设计
快速开始:基础配置与引入
安装与引入
通过以下命令克隆仓库并引入核心文件:
git clone https://gitcode.com/gh_mirrors/wh/wheelnav在HTML中引入必要的脚本文件:
<script src="js/required/raphael.js"></script> <script src="js/source/wheelnav.core.js"></script> <script src="js/source/spreader/wheelnav.spreader.js"></script> <script src="js/source/marker/wheelnav.marker.js"></script>基础初始化代码
// 创建基本轮式导航 var myWheelnav = new wheelnav("wheelDiv"); myWheelnav.slicePathFunction = slicePath().Pie; myWheelnav.spreaderPathFunction = spreaderPath().PieSpreader; // 默认spreader myWheelnav.markerPathFunction = markerPath().TriangleMarker; // 默认marker myWheelnav.createWheel(["首页", "产品", "服务", "关于我们"]);自定义spreader:打造独特导航布局
内置spreader类型与应用
wheelnav.js提供多种预设spreader样式,定义在js/source/spreader/目录下:
- PieSpreader:饼图样式,适合创建完整圆形导航
- StarSpreader:星形样式,为导航添加动感效果
- LineSpreader:线条样式,简约现代的设计选择
- FlowerSpreader:花朵样式,适合创意类网站
实现自定义StarSpreader
以下是星形spreader的核心实现代码(来自js/source/spreader/wheelnav.spreaderPath.Star.js):
this.StarSpreader = function (helper, percent, custom) { if (custom === null) { custom = StarSpreaderCustomization(); } helper.setBaseValue(custom.spreaderPercent * percent, custom); rbase = helper.wheelRadius * custom.spreaderPercent * custom.minRadiusPercent * percent; r = helper.sliceRadius; spreaderPathString = []; sliceAngle = helper.sliceAngle / helper.navItemCount; baseAngle = helper.navAngle; helper.StartSpreader(spreaderPathString, baseAngle, r); for (var i = 0; i < helper.navItemCount; i++) { startAngle = i * sliceAngle + (baseAngle + sliceAngle / 2); middleAngle = startAngle + (sliceAngle / 2); endAngle = startAngle + sliceAngle; spreaderPathString.push(helper.LineTo(startAngle, rbase)); spreaderPathString.push(helper.LineTo(middleAngle, r)); spreaderPathString.push(helper.LineTo(endAngle, rbase)); } spreaderPathString.push(helper.Close()); return { spreaderPathString: spreaderPathString, titlePosX: helper.titlePosX, titlePosY: helper.titlePosY }; };应用自定义spreader
// 使用星形spreader myWheelnav.spreaderPathFunction = spreaderPath().StarSpreader; // 自定义spreader属性 myWheelnav.spreaderPathCustom = { minRadiusPercent: 0.3, // 调整星形内圈大小 spreaderPercent: 0.8 // 调整spreader占比 }; myWheelnav.createWheel(["首页", "产品", "服务", "关于我们"]);自定义marker:增强交互体验
内置marker类型
marker定义在js/source/marker/目录下,主要类型包括:
- TriangleMarker:三角形标记,默认选项
- PieLineMarker:饼图线条标记
- LineMarker:直线标记
- DropMarker:水滴形标记
- MenuMarker:菜单样式标记
自定义marker样式与动画
通过修改marker路径和属性实现自定义效果:
// 自定义三角形marker myWheelnav.markerPathFunction = function(helper, percent, custom) { var arcBaseRadius = helper.wheelRadius * percent; var markerPathString = [ helper.MoveTo(helper.navAngle, arcBaseRadius), helper.LineTo(helper.navAngle - 5, arcBaseRadius * 0.8), helper.LineTo(helper.navAngle + 5, arcBaseRadius * 0.8), helper.Close() ]; return { markerPathString: markerPathString }; }; // 设置marker动画效果 myWheelnav.markerAnimation = true; myWheelnav.animatetime = 500; // 动画时长 myWheelnav.animateeffect = "elastic"; // 动画效果高级技巧:spreader与marker协同设计
样式统一与主题定制
通过CSS类统一控制spreader和marker样式:
/* 在css/index.css中定义样式 */ .wheelnav-spreader-in { fill: #3498db; stroke: #2980b9; stroke-width: 2; } .wheelnav-marker { fill: #e74c3c; stroke: #c0392b; stroke-width: 1; }在JavaScript中应用:
myWheelnav.spreaderPathInAttr = { "class": "wheelnav-spreader-in" }; myWheelnav.markerAttr = { "class": "wheelnav-marker" };响应式设计实现
// 监听窗口大小变化,调整导航尺寸 window.addEventListener('resize', function() { var newSize = Math.min(window.innerWidth, window.innerHeight) * 0.8; myWheelnav.wheelRadius = newSize / 2; myWheelnav.redraw(); });常见问题与解决方案
性能优化
- 减少导航项数量,建议不超过8个
- 禁用不必要的动画效果
- 使用minified版本:js/required/raphael.min.js和js/dist/wheelnav.min.js
浏览器兼容性
确保在老旧浏览器中正常工作:
// 检测并回退到简单模式 if (!Raphael.svg) { myWheelnav.spreaderEnable = false; myWheelnav.markerEnable = false; }总结与扩展学习
通过自定义spreader和marker,wheelnav.js可以创建出各种独特的轮式导航效果。关键文件路径总结:
- 核心功能:js/source/wheelnav.core.js
- Spreader实现:js/source/spreader/
- Marker实现:js/source/marker/
探索更多可能性,尝试结合js/source/slicePath/中的切片路径功能,创造出更加丰富多样的导航效果!
【免费下载链接】wheelnavAnimated wheel navigation JavaScript library based on Raphaël.js (SVG/VML). It can be a pie menu (radial menu, circular menu) and many more.项目地址: https://gitcode.com/gh_mirrors/wh/wheelnav
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
