我要投稿
投诉建议
首页
Web前端
后端技术
数据应用
编程语言
其他语言
技术落地
科技领域
SEO
科技迭代
当前位置:
首页
>
Web前端
>
CSS
写一个BUI折叠菜单插件
时间:2023-03-30 22:22:24
CSS
写一个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,只显示一个,不能满足其他要求。我们需要考虑更多的场景,提取更多的可配置变量。
上一篇:
一个UI设计师的Electron学习之路(一)
下一篇:
前端日常实践:88#视频演示如何使用CSS和D3制作火焰动画
写一个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产品负责人