PageSourceSearch

https://www.jszwfw.gov.cn/jsjis/ui/widgets/hanweb/menu/menu.js

js jszwfw.gov.cn collected 2026-09-24 18:52:23 UTC 4,079 bytes, 146 lines download raw bytes

1$.fn.menu = function(options) {
2	var inputJq = $(this);
3	var inputJqId = inputJq.attr('id');
4	var menu;
5	var menuId = inputJqId + '_menu';
6	var exist = $('#' + menuId).size() > 0;
7
8	var settings = {
9		width : inputJq.outerWidth() - 2,
10		height : null,
11		maxHeight : null,
12		tree : null,
13		content : null,
14		init : null,
15		event : 'click',
16		menuId : menuId,
17		callback: null
18	};
19
20	settings = $.extend(settings, options);
21
22	var heightStyle = settings.height ? 'height:' + settings.height + 'px' : '';
23
24	var menu;
25	if (exist) {
26		menu = $('#' + settings.menuId);
27		menu.css({
28			width : settings.width,
29			height : settings.height,
30			maxHeight : settings.maxHeight
31		});
32	} else {
33		$('body').append('<div id="' + settings.menuId + '" class="menu" ' + 'style="width:' + settings.width + 'px;' + heightStyle + '"><div class="menu-content"></div></div>');
34		menu = $('#' + settings.menuId);
35	}
36	var menuContent = menu.children('.menu-content');
37
38	if (settings.tree) {
39		menuContent.append('<ul id="' + settings.tree + '" class="ztree"></ul>');
40	} else if (settings.content) {
41		menuContent.html(settings.content);
42	}
43
44	if (settings.init) {
45		var treeJq = $('#' + settings.tree);
46		settings.init(menu, inputJq, treeJq);
47	}
48	//
49	// if (inputJq.is('[readonly]')) {
50	// return;
51	// }
52
53	if (!exist) {
54		$("body").bind("mousedown", onMouseDownBody);
55		inputJq.css('cursor', 'pointer').focus(function() {
56			$(this).blur();
57		});
58
59		inputJq.on(settings.event, toggleMenu);
60		
61		$(window).resize(hideMenu);
62	}
63
64	function toggleMenu() {
65		if (menu.is(':hidden')) {
66			showMenu();
67		} else {
68			hideMenu();
69		}
70	}
71
72	/**
73	 * 显示菜单
74	 */
75	function showMenu() {
76		if (settings.height && menu.outerHeight() > settings.height) {
77			menu.height(settings.height);
78		} else 	if (settings.maxHeight && menu.outerHeight() > settings.maxHeight) {
79			menu.height(settings.maxHeight);
80		} else {
81			menu.height('auto');
82		}
83		
84		var inputJqOffset = inputJq.offset();
85		var documentScrollTop = $(document).scrollTop();
86
87		var left = inputJqOffset.left;
88		menu.css('left', left + 'px');
89		var top = inputJqOffset.top + inputJq.outerHeight() + 1;
90		var bottom = $(window).height() - inputJqOffset.top + 1;
91		
92		var winHeight = $(window).height();
93		var upHeight = documentScrollTop + inputJqOffset.top - 1; //输入框上边距
94		var downHeight = documentScrollTop + winHeight - top; //输入框下边距
95		var menuHeight = menu.outerHeight();
96		
97		if (menuHeight < downHeight) { //菜单高度小于下边距,向下展开
98			menu.css('bottom', 'auto');
99			menu.css('top', top + 'px');
100		} else if (menuHeight < upHeight ) { //菜单高度小于上边距,向上展开
101			menu.css('top', 'auto');
102			menu.css('bottom', bottom + 'px');
103		} else { //菜单高度大于上下边距
104			if (downHeight > upHeight) { //下边距大于上边距,向下展开,最大高度下边距
105				menu.outerHeight(downHeight - 5);
106				menu.css('bottom', 'auto');
107				menu.css('top', top + 'px');
108			} else { //上边距大于下边距,向上展开,最大高度上边距
109				menu.outerHeight(upHeight - 5);
110				menu.css('top', 'auto');
111				menu.css('bottom', bottom + 'px');
112			}
113		}
114
115		if (menu.is(':hidden')) {
116			menu.slideDown(50, function() {
117				menu.children('.menu-content').css('overflow', 'auto');
118			});
119		}
120
121		if (settings.callback && settings.callback.show) {
122			settings.callback.show(menu, inputJq, treeJq);
123		}
124	}
125
126	/**
127	 * 隐藏菜单
128	 */
129	function hideMenu() {
130		menu.children('.menu-content').css('overflow', '');
131		menu.fadeOut(50);
132		
133		if (settings.callback && settings.callback.hide) {
134			settings.callback.hide(menu, inputJq, treeJq);
135		}
136	}
137
138	/**
139	 * 其他区域点击隐藏菜单
140	 */
141	function onMouseDownBody(event) {
142		if (event.target.id != inputJqId && $(event.target).closest('#' + inputJqId).size() == 0 && event.target.id != settings.menuId && $(event.target).closest('#' + settings.menuId).length == 0) {
143			hideMenu();
144		}
145	}
146};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.