前言:自己动手,丰衣足食,教育的好,那么今天我来纯手工制作一个文本框中弹出树形菜单,这个在很多的web前端经常用到。
效果图如下:
功能介绍:
初始状态下,弹出层不显示,文本框中显示根节点内容,当点击箭头后,弹出树形下拉框,树形菜单中汇默认选中文本框中当前显示内容,点击新的节点后,文本框内容更新,同时弹出层隐藏。
准备材料有:
1.Eclipse,2.jQuery ztree,3.箭头图片,见效果图中文本框右侧。
开始制作:
1.项目目录如下:
2.在inputCombo.html加入以下内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>手工制作输入框中探出树形菜单</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" /> <link href="css/demo.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script> <script type="text/javascript" src="js/jquery.ztree.core-3.5.min.js"></script> <style> .combo-arrow { width: 18px; height: 20px; overflow: hidden; display: inline-block; vertical-align: top; cursor: pointer; opacity: 0.6; filter: alpha(opacity = 60); background: url('img/combo_arrow.png') no-repeat center center; background-color: #E0ECFF; } .combo { border-color: #95B8E7; background-color: #ffffff; display: inline-block; white-space: nowrap; margin: 0; padding: 0; border-width: 1px; border-style: solid; overflow: hidden; vertical-align: middle; } .combo-text { font-size: 12px; border: 0px; line-height: 20px; height: 20px; margin: 0; padding: 0px 2px; } .ztree { margin-top: 0px; border: 1px solid #617775; background: #f0f6e4; height: 260px; overflow-y: auto; min-width: 132px; } </style> <script type="text/javascript"> var setting = { view : { dblClickExpand : false }, data : { simpleData : { enable : true } }, callback : { onClick : onClick }, view : { selectedMulti : false, showIcon : false } }; window.onload = function() { var zNodes = [{ name : "父节点1 - 展开", open : true, children : [{ name : "父节点11 - 折叠", children : [{ name : "叶子节点111" }, { name : "叶子节点112" }, { name : "叶子节点113" }, { name : "叶子节点114" }] }, { name : "父节点12 - 折叠", children : [{ name : "叶子节点121" }, { name : "叶子节点122" }, { name : "叶子节点123" }, { name : "叶子节点124" }] }, { name : "父节点13 - 没有子节点", isParent : true }] }, { name : "父节点2 - 折叠", children : [{ name : "父节点21 - 展开", open : true, children : [{ name : "叶子节点211" }, { name : "叶子节点212" }, { name : "叶子节点213" }, { name : "叶子节点214" }] }, { name : "父节点22 - 折叠", children : [{ name : "叶子节点221" }, { name : "叶子节点222" }, { name : "叶子节点223" }, { name : "叶子节点224" }] }, { name : "父节点23 - 折叠", children : [{ name : "叶子节点231" }, { name : "叶子节点232" }, { name : "叶子节点233" }, { name : "叶子节点234" }] }] }, { name : "父节点3 - 没有子节点", isParent : true }]; $("#proxyserial").attr({ value : zNodes[0].name }); $.fn.zTree.init($("#treeDemo"), setting, zNodes); }; /** * 隱藏樹形下拉框 */ function hideMenu() { $("#menuContent").fadeOut("fast"); $("body").unbind("mousedown", onBodyDown); } /** * 点击树的时候给文本框赋值 */ function onClick(e, treeId, treeNode) { $("#proxyserial").attr({ value : treeNode.name }); hideMenu(); } /** * 打开树形结构 */ function showMenu() { var cityObj1 = $("#proxyserial"); var cityOffset1 = $("#proxyserial").offset(); $("#menuContent").css({ left : cityOffset1.left + "px", top : cityOffset1.top + cityObj1.outerHeight() + "px" }).slideDown("fast"); $("body").bind("mousedown", onBodyDown); } /** * 点击树形结构以外时,关闭树形下拉框 * * @param event */ function onBodyDown(event) { if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) { hideMenu(); } } </script> </head> <body> <span class="combo"> <input type="text" class="combo-text" style="height: 20px;" id="proxyserial" readonly /> <span class="combo-arrow" style="height: 20px;" onclick="showMenu();" > </span> </span> <div id="menuContent" class="menuContent" style="display: none; position: absolute;"> <ul id="treeDemo" class="ztree"></ul> </div> </body> </html>
3.关键点介绍:
3.1.要使弹出层在文本框的下侧进行显示,控制代码(控制弹出层的坐标)为
var cityObj1 = $("#proxyserial"); var cityOffset1 = $("#proxyserial").offset(); $("#menuContent").css({ left : cityOffset1.left + "px", top : cityOffset1.top + cityObj1.outerHeight() + "px" }).slideDown("fast"); $("body").bind("mousedown", onBodyDown);
3.2.其余就是css式样,对文本框+箭头的式样在很多网页上都有,可以根据F12得来(de,lai,quan,bu,fei,gong,fu)。
3.3.再者就是生成节点,因为很多情况下,节点的数据都非上文中所定死的json数据,而是由一些规则的数据生成所得,这个根据你的需要进行编码。
OK,以上环节就完了,这是一个非常实用且能够锻炼你动手能力的工艺。
相关推荐
实际上,这个新弹出的窗体都是一个独立的原型,也是由UIDesigner制作出来的。由于它里面的控件同样可以设置下一步的响应动作,所以从总体上来看,众多原型就像一个树状结构,而其中的父节点就是图二中的设置窗体了...
-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性...
-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性...
A、网状 B、层次 C、树形 D、链状 29.显示卡速度对Windows98的系统性能影响的因素有___A____。 A、Windows98的GUI特点 B、背景图案 C、屏幕保护程序 D、画笔 30.下列计算机设备中,属于输入设备的是__D___。 A、...
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip