我要投稿
投诉建议
首页
Web前端
后端技术
数据应用
编程语言
其他语言
技术落地
科技领域
SEO
科技迭代
当前位置:
首页
>
Web前端
>
HTML5
写一个BUI折叠菜单插件
时间:2023-04-05 22:16:20
HTML5
写一个BUI折叠菜单插件效果预览控件,分析控件的结构。一键显示隐藏效果,点击时会先隐藏展开,再展开自己。我们从界面上看结构设计
菜单
内容
菜单2
content2
这里我们采用了同级并列的方式,结构写起来有点麻烦。其实这个结构和dl、dt、dd是一致的,所以我们完全可以优化成下面的结构。
Menu
Content
Menu2
Content2
bui的设计是基于按钮原型打开容器的方式,让每个容器保持一致的标准高度,所以我们优化了结构。
Menu
Content
菜单2
menu
内容
Menu2
Content2
控件样式一般作为插件的独立样式引入-in,bui-foldmenu.css文件。bui-foldmenu{}.bui-foldmenu>dt,.bui-foldmenu>[class*=bui-btn]{border:0;border-bottom:1pxsolid#eee;}/*默认隐藏内容*/.bui-foldmenu>dd{display:none;边界:0;溢出-y:自动;border-bottom:1pxsolid#eee;背景:#fff;}/*icon*/.bui-foldmenu.icon-foldmenu{-webkit-transition:-webkit-transform0.3sease-in-out0s;transition:transform0.3sease-in-out0s;}.bui-foldmenu.icon-foldmenu:before{content:"\e649";}/*激活显示块*/.bui-foldmenu>.active+dd{显示:block;}/*激活二级菜单点餐时把箭头翻过来*/.bui-foldmenu>.active.icon-foldmenu{-webkit-transform:rotate(-180deg);transform:rotate(-180deg);}内容标签在样式中默认是隐藏的(dt与相邻的dd)由控件初始化,其他都是一些装饰。设置激活状态后,箭头会翻转。控制脚本1.5.4增加了bui.extend方法,可以用来扩展插件,和原来使用bui的方法是一样的。bui.extend控件参数是一个对象,包含以下参数namestring控件名称configobjectcontroldefaultparametercallbackfunctioncontrollogic最简单版本//最简单版本bui.extend({name:"foldmenu",config:{id:""},callback:function(opt){//指向插件抛出的public方法,optionwidget等letthat=this;//this.config是已经和初始化合并的parametersResult;letparam=this.config;//缓存选择器let$id=null;//抛给开发者的方法that.init=function(option){//合并直接调用init方法的参数param=$.extend(true,{},param,option);//单页多页选择器,如果是单页,这个插件只能在module中使用,不能在bui.ready$id中使用=bui.$(param.id);//绑定事件,点击时添加激活样式$id.children("dt").click(function(e){varhasActive=$(this).hasClass("active");如果(hasActive){$(this).removeClass("active");}else{//添加样式后,会自动显示和处理箭头和下一级;$(this).addClass("活动");}})返回那个;}//如果有依赖的bui控件,应该写在这里,方便外部调用//that.widgets.loading=ui.loading({//appendTo:opt.id//});//如果需要销毁生命周期,在这里添加。//that.beforeDestroy=function(){////返回那个;//}//mustPassidif(!param.id){//抛出错误bui.showLog("Theidparametermustbepassed.")returnthat;}//默认初始化一次returnthis.init(opt);}});控制使用
menu
content
menu2
Content2
//初始化varuiFloder=bui.foldmenu({id:"#folder"})//uiFloder.config可以获取部分实例的参数。插件预览在线预览bui.folder插件完美插件使用闭包防止全局污染。放在一个闭包中,可以防止control被污染,window.libs指的是zepto或者jquery,去掉zepto.js,importjquery.js可以完美切换到jquery版本。(推荐的jquery版本:1.9.x-1.11.x);(function(ui,$){"usestrict";})(window.bui||{},window.libs);添加注释/*@namespacebui*@classfoldmenu*@constructor*@param{object}option*@param{string}option.id[controlid]*@param{string}[option.handle][areaclicked]*@param{number}[option.height][父层高度,0为自适应]*@param{string}[option.target][显示隐藏目标]*@param{number}[option.targetHeight][目标自适应heightorlimitheight]*@param{boolean}[option.single][false(显示多个)||true(一次只折叠一个)]*@param{function}[option.onInited][1.5.1新初始化后触发]*@param{function}[option.callback][按钮点击回调]*@example**/fullversion;(function(ui,$){"usestrict";/*@namespacebui*@classfoldmenu*@constructor*@param{object}选项*@param{string}option.id[控件id]*@param{string}[option.handle][点击区域]*@param{number}[option.height][父层高度,0为自适应]*@param{string}[option.target][显示隐藏目标]*@param{number}[option.targetHeight][目标自适应高度或限制高度]*@param{boolean}[option.single][false(显示多个)||true(一次只折叠一个)]*@param{function}[option.onInited][1.5.1新初始化后触发]*@param{function}[option.callback][点击按钮回调]*@example**/ui.extend({name:"foldmenu",config:{id:""},callback:function(opt){//指向插件、选项小部件等抛出的公共方法。让那个=this;//this.config是合并初始化参数的结果;letparam=this.config;//缓存选择器let$id=null;//抛给开发者的方法that.init=function(option){//合并直接调用init方法的参数param=$.ext结束(真,{},参数,选项);//单页多页选择器,如果是单页,这个插件只能在模块中使用,不能在bui.ready中使用$id=ui.$(param.id);//绑定事件,点击时添加激活样式$id.children("dt").click(function(e){varhasActive=$(this).hasClass("active");if(hasActive){$(this).removeClass("active");}else{//添加样式后,会自动显示箭头和下一层;$(this).addClass("active");}})returnthat;}//如果有依赖的bui控件,应该写在这里,方便外部调用//that.widgets.loading=ui.loading({//appendTo:opt.id//});//如果需要销毁生命周期,在这里添加。//that.beforeDestroy=function(){////返回那个;//}//必须传递idif(!param.id){//抛出错误ui.showLog("Theidparametermustbepassed.")returnthat;}//默认初始化一次returnthis.init(opt);}});})(window.bui||{},window.libs);结语上面我们举例说明了最简单的插件的开发和使用,但是插件的适配性还不够,我们还需要考虑各种扩展性,如何适配复杂的场景,比如内容需要固定高度,换了selector,只显示一个,不能满足其他要求。我们需要考虑更多的场景,提取更多的可配置变量。
上一篇:
Web前端开发学习计划推荐
下一篇:
移动端轮播实现方法(dGun.js)
写一个BUI折叠菜单插件相关文章
谷歌在CES 2019上的10大亮点,每一个都与谷歌语音助手
脚踝革命即将到来,脚会成为可穿戴设备的下一个战场吗?
虚拟现实面临技术挑战, VR会是一个大陷阱吗?
AI企业的下一个使命!让生物识别数据的使用变得透明
VR是一个颠覆时代的产品, VR的价值是什么?
联想乐梦一视VR智能眼镜体验评测 进入另一个世界
华为平板M5 Pro携手苏宁送礼,下一个“小画家”就是你!
使用 Apple Watch 一个月后,我喜欢 Apple
诺基亚OZO虚拟现实设备全解析!只是一个球吗?
【深度】VR虚拟现实的未来不仅仅是电影和游戏,而是一个全新的
荣耀畅玩手环A1支持紫外线监测,可使用近一个月
是时候投资智能硬件了,可能会成为下一个“苹果”
虚拟现实!一个创造梦想的产业
虽然只是一个“数字助理”,但却是AI的巨大飞跃
虚拟现实将是一个百亿市场,5年后渗透日常生活
蚂蚁看秦铮!一个土家族男孩的虚拟现实梦想
百度地图率先布局,苹果正在寻找下一个发力点, AR会成为技术
智能穿戴巨头纷纷倒下,谁会成为下一个炮灰?
如何选择电饼铛?抓一个就走? !
5年格力营收达到6000亿元,又是一个梦想
最新推荐
1
除螨虫有用吗?那么它只是一个吸尘器吗?
2
蓝牙耳机和音箱无缝切换,不错过任何一个节拍
3
软银投资后,Ludos会改写区块链游戏生态吗?
4
AI写诗靠谱吗?微软小冰出版新诗集,让人一头雾水
5
大家都在追捧的VR是不是一个诱人的骗局?
6
钛技术!境内外双管齐下,出海会是下一个强劲增长点吗?
7
微珠让您度过一个顺畅的夏天,飞利浦7000系列电动剃须刀专为
8
澳大利亚极客的谷歌眼镜山寨品!买不到就自己做一个
9
虚拟现实的三大阵营你最喜欢哪一个?
10
健康产业是否已成为智能穿戴设备的一个噱头?
猜你喜欢
1
这家初创公司使用人工智能来撰写文章摘要,连美国情报局都在用它
2
可穿戴设备的下一个大类别!耳戴式设备
3
OPPO陈明永!五年内可穿戴设备仍将是一个虚拟概念
4
CODING获腾讯云1亿元B+轮融资,推出Cloud Stu
5
小米米兔儿童电话手表评测 给宝宝一个贴心的保镖
6
产品卖进阿联酋 一个红船旁升起的“智能服饰之梦”
7
VR技术会是下一个十亿级市场吗?
8
配备一个手环比头戴式设备有“提神”功能还好
9
与科大讯飞胡雨深度对话!如何制作一个可以处理33种语言的翻译
10
专利或将成为可穿戴市场下一个“杀手锏”!
11
超过 10 个 IBEACON 模型的评论,哪一个是你的最爱
12
耳朵会成为下一个新的可穿戴战场吗?
13
视频广告的下一个发展!以AI场景赢得竞争
14
全球智能机产业版图!这4类初创公司将在未来构建一个新世界
15
苏宁加紧“上山下乡”,县城市场将成为下一个强势竞争点
16
Flyme的贴心功能,助你度过一个无忧无虑的暑假
17
开始使用小米兔定位手机吧!麻雀虽小,装备精良,但它更像是一个
18
谷歌等巨头已经开始布局智能硬件的下一个“大钱”风口:智能服装
19
语音控制!企业计算的下一个重大突破
20
谷歌在操作系统上的另一个布局,专访Wear OS产品负责人