html5写一个BUI折叠菜单插件的实现方法

来源:脚本之家  责任编辑:小易  

最佳答案这问题好纠结,最少来个截图啊,给你写个吧,粘过去就行,不行的话留个q,继续问<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>选项卡</title> <

写一个BUI折叠菜单插件效果预览

问:效果如图1图2一个标题+一个折叠按钮

控件分析控件结构

一个点击显示隐藏的效果, 并且点击的时候, 会先把展开进行隐藏, 再展开自己的. 从界面上我们来看看结构的设计.

问题说明:求一共有几种方式实现 代码怎么写。

<!-- 一般控件最外层就是控件的容器名 --> <div class="bui-foldmenu"> <div class="bui-foldmenu-item">菜单</div> <div class="bui-foldmenu-content">内容</div> <div class="bui-foldmenu-item">菜单2</div> <div class="bui-foldmenu-content">内容2</div> </div>

这里我们采用的是并列同级的方式, 那结构写起来有点麻烦, 其实这个结构跟 dl,dt,dd 是一致的, 那我们完全可以优化成以下结构.

问题说明:有1000台设备,每台设备有一个编号,在搜索框中输入编号确定后显示该设备

<!-- 一般控件最外层就是控件的容器名 --> <dl class="bui-foldmenu"> <dt>菜单</dt> <dd>内容</dd> <dt>菜单2</dt> <dd>内容2</dd> </dl>

bui的设计是基于按钮的原型撑开容器的方式, 这样可以保持每个容器都是一致的标准高度, 所以我们再对结构进行优化.

问:这个只能实现一个折叠,我要实现多个竖向关系的折叠,把代码直接复制一段

<!-- 一般控件最外层就是控件的容器名 --> <dl class="bui-foldmenu"> <dt class="bui-btn">菜单</dt> <dd>内容</dd> <dt class="bui-btn">菜单2</dt> <dd>内容2</dd> </dl>

像刚刚效果图,菜单的点击还会有图标的切换, 再结合布局来得到以下结构, 一切皆布局, 一切皆容器.

  其一、稀少的东西最珍贵,翡翠戒面出自原石里最为精华的地方,材料如此罕见,自是供不应求。好的戒面对于水底色工有非常大的要求。所以,同样大小成色的戒面要比挂件贵许多。其二、戒面的制作对料要求很高。绺裂、白棉、黑点在别的地方属于普通范畴,如果在戒面碰到这个情况就不是正常的范畴,尽量要避免。种好的戒面,会泛着光,有近似太阳光晕的效果,转动戒面时,会有柔和的光晕泛起。对收藏来说,优先选择起光的戒面。泛着光的裸石戒面戒面要特别注意颜色,颜色要均和,不能太过,其中。色差会影响价格而且浮动非常巨大。其中形状是比较容易被忽略的,但是也是最大的考量因素。饱满的戒面和薄的戒面如果从收藏来说,价值也是相差了很大倍

<!-- 一般控件最外层就是控件的容器名 --> <dl class="bui-foldmenu"> <dt class="bui-btn bui-box"><div class="span1">菜单</div><i class="icon-foldmenu"></i></dt> <dd>内容</dd> <dt class="bui-btn bui-box"><div class="span1">菜单2</div><i class="icon-foldmenu"></i></dt> <dd>内容2</dd> </dl>

“天鹅颈”,顾名思义就是像天鹅一样拥有纤细的长的脖子,光滑紧致。我不是谁的粉,但是不得不承认她们几位的天鹅颈是真的很好看:刘诗诗,倪妮,刘亦菲!首先当然是刘诗诗啊!晋级成幸福人妻的刘诗诗,被讨论最多的,除了跟老公吴奇隆的爱情,就是她独特清新的气质了吧!从小练芭蕾,对仪态的要求特别高,所以拥有标准天鹅颈一点都不奇怪~尤其是跟其他女明星合影,脖颈跟气质的优势简直不要太明显!你们发现没,除了刘诗诗,倪妮的脖子肩膀线条特别特别美!倪妮简直符合了所有少女的终极梦想:人美身材棒气质好会穿衣,有什么理由不爱!倪妮的气质跟她的天鹅颈分不开~如果脖颈线条没有这么优美,那气质可能也要大打折扣了!自带仙气的刘亦菲更

控件样式

这个我很有发言权??,因为我就是俩女儿。刚怀孕老二时,想着管他男孩女孩,反正生了就是给老大作伴呢!这时其实内心有点小期盼(要是个儿子更好啊!)等到六个月时找个熟人做了四维,当医生给说和老大一样时,心情很失落啊!感觉受打击了,内心的那点期盼没有了,老公安慰我说都一样(其实也不知他真心还是假意)。但过了几天之后就调整过来心情了,初衷又回来了,就是俩孩子作伴呢!等到孩子出生了,这时已经不再介意男孩女孩了,只看到那么可爱的一团。特别是她的姐姐看到她那一刻,爱不释手,亲亲抱抱。现在老二已经3岁了,俩女儿相处的很好,一起玩玩具,一起吃睡,互相照顾。俩女儿,很好的,不用愁。

一般作为插件的独立样式引入, bui-foldmenu.css文件

关于日产、丰田、本田这三个品牌车哪种质量更好这个问题,目前已有明确的数据显示。以下的这张图片就是2017年汽车品牌可靠度研究报告。在问题中提到过得三个品牌中,是丰田位居第一位,而且在总品牌排名里也是遥遥领先,丰田汽车公司旗下的豪华品牌雷克萨斯与保时捷一同居于首位。本田就显得稍稍逊色,但也在行业水平之上,而日产在整体可靠性上就显然有些不尽人意。居于丰田本田之后。那么作为日系前三强,到底有哪些过人的品质呢?大家都有不同的看法,今天就来聊一聊自己对这三个品牌的观点。丰田,以整车质量闻名,给我的感觉是既平庸又不平庸,因为它的设计、数据、内饰等都不出挑,但引擎、油耗和可靠性做到了名列前茅。真正体验时觉得

 

.bui-foldmenu {} .bui-foldmenu>dt, .bui-foldmenu>[class*=bui-btn] { border: 0; border-bottom: 1px solid #eee; } /* 默认隐藏内容 */ .bui-foldmenu>dd { display: none; border: 0; overflow-y: auto; border-bottom: 1px solid #eee; background: #fff; } /* 图标 */ .bui-foldmenu .icon-foldmenu { -webkit-transition: -webkit-transform 0.3s ease-in-out 0s; transition: transform 0.3s ease-in-out 0s; } .bui-foldmenu .icon-foldmenu:before { content: "\e649"; } /* 激活的时候显示block */ .bui-foldmenu>.active+dd { display: block; } /* 激活的二级菜单的时候,把箭头翻转 */ .bui-foldmenu>.active .icon-foldmenu { -webkit-transform: rotate(-180deg); transform: rotate(-180deg); }

样式里面就默认隐藏内容标签(dt相邻的dd),由控件初始化, 其它都是一些修饰, 设置激活状态的时候,箭头翻转.

控件脚本

1.5.4 新增 bui.extend 方法,可以用来扩展插件, 并且保持跟 bui原本的使用方式一致.

bui.extend 控件参数是一个对象, 其中包含以下参数

name string 控件名称config object 控件默认参数callback function 控件的逻辑最简单的版本

// 最简单的版本 bui.extend({ name: "foldmenu", config: { id: "" }, callback: function(opt) { // that 指向插件的抛出的公共方法, option widget 等 let that = this; // this.config 为已经跟初始化参数合并以后的结果; let param = this.config; // 缓存选择器 let $id = null; // 要抛给开发者的方法 that.init = function(option) { // 对直接调用init方法的参数进行合并 param = $.extend(true, {}, param, option); // 单页多页选择器,如果是单页,这个插件只能在模块里面用, 不能在bui.ready $id = bui.$(param.id); // 绑定事件,点击的时候增加激活样式 $id.children("dt").click(function(e) { var hasActive = $(this).hasClass("active"); if (hasActive) { $(this).removeClass("active"); } else { // 加上样式以后会自动对箭头及下一层级展示处理; $(this).addClass("active"); } }) return that; } // 如果有依赖bui控件,应该在这里写,这样方便外部调用 // that.widgets.loading = ui.loading({ // appendTo: opt.id // }); // 如果需要销毁的生命周期,则在这里加上. // that.beforeDestroy = function() { // // return that; // } // 必须传id if (!param.id) { // 抛出错误 bui.showLog("必须传id参数.") return that; } // 默认先初始化一次 return this.init(opt); } });

控件使用

<dl id="folder" class="bui-foldmenu"> <dt class="bui-btn">菜单</dt> <dd>内容</dd> <dt class="bui-btn">菜单2</dt> <dd>内容2</dd> </dl>

// 初始化 var uiFloder = bui.foldmenu({id:"#folder"}) // uiFloder.config 可以拿到一些实例的参数

插件预览

在线预览bui.folder插件

完善插件

用闭包防止全局污染

放在一个闭包里,这样可以防止控件受到污染, window.libs 指的是 zepto 或者 jquery, 当你去掉引入 zepto.js 的时候, 引入 jquery.js 就可以完美切换成jquery版本. (jquery版本建议在: 1.9.x - 1.11.x)

;(function(ui, $) { "use strict"; })(window.bui || {}, window.libs);

加上注释

/* @namespace bui * @class foldmenu * @constructor * @param {object} option * @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 * */

完整版

;(function(ui, $) { "use strict"; /* @namespace bui * @class foldmenu * @constructor * @param {object} option * @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) { // that 指向插件的抛出的公共方法, option widget 等 let that = this; // this.config 为已经跟初始化参数合并以后的结果; let param = this.config; // 缓存选择器 let $id = null; // 要抛给开发者的方法 that.init = function(option) { // 对直接调用init方法的参数进行合并 param = $.extend(true, {}, param, option); // 单页多页选择器,如果是单页,这个插件只能在模块里面用, 不能在bui.ready $id = ui.$(param.id); // 绑定事件,点击的时候增加激活样式 $id.children("dt").click(function(e) { var hasActive = $(this).hasClass("active"); if (hasActive) { $(this).removeClass("active"); } else { // 加上样式以后会自动对箭头及下一层级展示处理; $(this).addClass("active"); } }) return that; } // 如果有依赖bui控件,应该在这里写,这样方便外部调用 // that.widgets.loading = ui.loading({ // appendTo: opt.id // }); // 如果需要销毁的生命周期,则在这里加上. // that.beforeDestroy = function() { // // return that; // } // 必须传id if (!param.id) { // 抛出错误 ui.showLog("必须传id参数.") return that; } // 默认先初始化一次 return this.init(opt); } }); })(window.bui || {}, window.libs);

结语

上面我们示例了一个最简单的插件的开发及使用, 但插件的适应性还不够, 还需要考虑各种扩展性,复杂的场景如何去适应, 比方内容是需要固定高度,选择器换成其它,只展示一个,等各种需求都不能满足, 我们需要考虑更多的场景, 抽取更多的变量作为可配置.

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

求一个 HTML的竖向折叠菜单 源码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>竖向的折叠菜单</title><script language = JavaScript>function showmenu(id) {var list = document.getElementById("list"+id);var menu = document.getElementById("menu"+id)if (list.style.display=="none") {document.getElementById("list"+id).style.display="block";menu.className = "title1";}else {document.getElementById("list"+id).style.display="none";menu.className = "title";}} </script><style type="text/css"><!--*{margin:0;padding:0;list-style:none;font-size:14px}#nav{margin:10px;text-align:center;line-height:25px;width:200px;}.title{background:#336699;color:#fff;border-bottom:1px solid #fff;cursor:pointer;}.title1{background:#888;color:#000;border-bottom:1px solid #666;cursor:pointer;}.content li{color:#336699;background:#ddd;border-bottom:1px solid #fff;}--></style></head><body><div id="nav"><div class="title" id="menu1" onclick="showmenu('1') ">网站制作</div><div id="list1" class="content" style="display:none">    <ul><li>div+css</li><li>网站设计</li><li>网站切图</li></ul></div><div class="title" id="menu2" onclick="showmenu('2')">网页代码</div><div id="list2" class="content" style="display:none"><ul><li>菜单导航</li><li>层和布局</li><li>图片切换</li></ul></div></div></body></html>看是你想要的吗?

HTML5怎么做出苹果折叠菜单的效果

1、在网页区添加以下样式定义 :2、在网页区添加菜单HTML代码