[转]网站JS源码1--产品分类下拉菜单实现原理

网站总算是开发完成了,现在运行也比较稳定,今后打算写写一些技术文章,好好总结一下。

看看效果图:

再看看HTML代码:

 

ContractedBlock.gifExpandedBlockStart.gif产品分类HTML
<ul id="lb_menu" class="menu" style=" display: none" onMouseOver="$(this).show()"></ul>
<div id="lb"><div class="lbbgno"><div class="jian" id="jian" onClick="FlexClass('lbic', this)"></div><ul id="lbic" class="list" style="height: 66px"><li><href="/product-1.aspx" name="1">电脑IC</a>(102)</li><li><href="/product-2.aspx" name="2">通信IC</a>(406)</li><li><href="/product-3.aspx" name="3">门铃IC</a>(4)</li><li><href="/product-4.aspx" name="4">手表IC</a>(2)</li><li><href="/product-5.aspx" name="5">温控IC</a>(1)</li><li><href="/product-6.aspx" name="6">音乐IC</a>(1)</li><li><href="/product-7.aspx" name="7">电视机IC</a>(15)</li><li><href="/product-8.aspx" name="8">报警器IC</a>(6)</li><li><href="/product-9.aspx" name="9">存储器</a>(44)</li><li><href="/product-10.aspx" name="10">电源模块</a>(21)</li><li><href="/product-11.aspx" name="11">驱动IC</a>(181)</li><li><href="/product-12.aspx" name="12">手机IC</a>(6)</li><li><href="/product-13.aspx" name="13">闪灯IC</a>(5)</li><li><href="/product-14.aspx" name="14">显示IC</a>(12)</li><li><href="/product-15.aspx" name="15">逻辑IC</a>(1)</li><li><href="/product-16.aspx" name="16">音响IC</a>(5)</li><li><href="/product-17.aspx" name="17">影碟机IC</a>(7)</li><li><href="/product-18.aspx" name="18">电子琴IC</a>(0)</li><li><href="/product-19.aspx" name="19">单片机</a>(127)</li><li><href="/product-20.aspx" name="20">其它集成电路</a>(594)</li><li><href="/product-21.aspx" name="21">遥控IC</a>(11)</li><li><href="/product-22.aspx" name="22">语音IC</a>(380)</li><li><href="/product-23.aspx" name="23">玩具IC</a>(0)</li><li><href="/product-24.aspx" name="24">稳压IC</a>(26)</li><li><href="/product-25.aspx" name="25">线性IC</a>(9)</li><li><href="/product-26.aspx" name="26">录象机IC</a>(3)</li><li><href="/product-27.aspx" name="27">照相机IC</a>(1)</li><li><href="/product-28.aspx" name="28">放大器IC</a>(7)</li><li><href="/product-29.aspx" name="29">仿真器</a>(0)</li></ul></div><div class="lbbg"><div class="jian" id="jian1" onClick="FlexClass('lbnoic', this)"></div><ul id="lbnoic" class="list" style="height: 66px"><li><href="/product-31.aspx" name="31">二极管</a>(401)</li><li><href="/product-30.aspx" name="30">三极管</a>(62)</li><li><href="/product-32.aspx" name="32">电容</a>(126)</li><li><href="/product-33.aspx" name="33">电阻</a>(102)</li><li><href="/product-34.aspx" name="34">电位器</a>(44)</li><li><href="/product-35.aspx" name="35">继电器</a>(468)</li><li><href="/product-36.aspx" name="36">传感器</a>(477)</li><li><href="/product-37.aspx" name="37">变压器</a>(191)</li><li><href="/product-38.aspx" name="38">变频器</a>(8)</li><li><href="/product-39.aspx" name="39">电感器</a>(55)</li><li><href="/product-40.aspx" name="40">连接器</a>(177)</li><li><href="/product-41.aspx" name="41">保险元器件</a>(9)</li><li><href="/product-42.aspx" name="42">频率元件</a>(2)</li><li><href="/product-43.aspx" name="43">开关元件</a>(107)</li><li><href="/product-480.aspx" name="480">印刷线路板</a>(10)</li><li><href="/product-44.aspx" name="44">光电元件</a>(329)</li><li><href="/product-45.aspx" name="45">显示器件</a>(71)</li><li><href="/product-46.aspx" name="46">场效应管</a>(14)</li><li><href="/product-497.aspx" name="497">电声配件</a>(0)</li><li><href="/product-518.aspx" name="518">电子加工</a>(2)</li><li><href="/product-529.aspx" name="529">开关</a>(257)</li><li><href="/product-601.aspx" name="601">电源</a>(23)</li><li><href="/product-612.aspx" name="612">电线、电缆</a>(43)</li><li><href="/product-478.aspx" name="478" class="b">电子元器件</a>(11890)</li><li><href="/product-528.aspx" name="528" class="b">电工电气</a>(683)</li><li><href="/product-763.aspx" name="763" class="b">照明工业</a>(142)</li><li><href="/product-1243.aspx" name="1243" class="b">安全防护</a>(235)</li><li><href="/product-892.aspx" name="892" class="b">仪器仪表</a>(895)</li><li><href="/product-1366.aspx" name="1366" class="b">机械设备</a>(1051)</li><li><href="/product-2088.aspx" name="2088" class="b">五金工具</a>(138)</li></ul></div><div style="clear:both;"></div></div>

 

常规的做法是每个节点如<a href="/product-11.aspx" name="11">驱动IC</a>这样的节点应该出现mouseover或mouseout之类的代码。这样做不好的一点是会产生大量重复的代码,而且还需要做每个相应的下拉菜单层,更增加了文件大小,网站打开速度自然比较慢。而且分类是动态生成的更不可能这样做。

我的思路是:

1,只做一个浮动层,即“发布供应”“发布求购”下拉层。

2,鼠标移动的时候JS动态计算在哪一个产品分类上,然后传该分类的参数给层(动态生成层HTML代码)。

 

主要核心代码如下:

 

//显示产品发布下拉菜单
var currClass;
;(
function () {
  
var showMenu = function(event) {
    
var el = Event.element(event);
    
if (el.tagName != 'A'return;
    
var upel = $(el).up(1).id;

    
if(upel == 'lbic' || upel == 'lbnoic') {
      currClass 
=el.innerHTML;
      
var tipbox = $('lb_menu');

      
var dimensions = Element.getDimensions(tipbox);
      
var element_width = dimensions.width;
      
var element_height = dimensions.height;
      
      
var pos = Position.cumulativeOffset(el);
      
var posX = pos[0];
      
var posY = pos[1+ 13;
      
      
if ((element_width + posX) >= getWindowWidth()) posX -= element_width;
      
if ((element_height + posY) >= getWindowHeight()) posY -= element_height + 13;
      
      UIstr(el, tipbox);
      tipbox.setStyle({ top: posY 
+ 'px', left: posX + 'px'});    
      tipbox.show();
    }
  };
  
  
var hideMenu = function(event) {
    
var lb_menu = $('lb_menu');
    
if (lb_menu) lb_menu.hide();
  };

  Event.observe(document, 
'mouseover', showMenu, false);
  Event.observe(document, 
'mouseout', hideMenu, false);
})();

 

这里功能是鼠标移动,动态注册分类节点JS事件,并执行显示或隐藏下拉层。其它相关JS如下:

 

ContractedBlock.gifExpandedBlockStart.gif生成下拉UI
//生成下拉UI
function UIstr(el, tipbox) {
  
var name = el.name;  
  tipbox.update(
'<li><a href="javascript:SaleEvent('+ name +')">发布供应</a></li><li><a href="javascript:BuyEvent('+ name +')">发布求购</a></li>');
}

//发布供应
function SaleEvent(classid) {
  window.open(web 
+'aspx/member/product_add.aspx?itemIndex=2_7&classid='+ classid);
}

//发布求购
function BuyEvent(classid) {
  window.open(web 
+'aspx/buyadd/productbuy.aspx?classid='+ classid);
}

 

上面代码看起来就明白,就是生成下拉层HTML代码及下拉层的JS事件。

 

Event.observe(document, 'mouseover', showMenu, false);
Event.observe(document, 'mouseout', hideMenu, false);

 大家注意到上面的分类节点事件,当离开分类时会隐藏下拉层,所以下拉层需要有mouseover事件

<ul id="lb_menu" class="menu" style=" display: none" onMouseOver="$(this).show()"></ul>

 

就这样做完了,不知大家明白了没有^^

 

做个小广告^^

姓 名:彭辉       
年 龄:25      
工作经验:3年      
求职意向:行业门户平台/基本BS架构应用系统开发
工作地点:北京  

目前在职,想换个新的环境,有意QQ联系,哪位大哥推荐也行啊^^
QQ:775851086

近期作品
买卖IC网
www.mmic.net.cn
整部技术架构均本人独立设计并完成开发。

转载于:https://www.cnblogs.com/kangtr/archive/2008/10/10/1308447.html

讯客分类信息系统v2.2 ==================== 讯客分类信息系统是一个完善的分类信息发布网站系统,是一个免费的信息发布的平台。适合各行各业需要发布信息 展示信息 传播信息的网站! v2.2功能简介: 1.信息发布功能(可发布图片,链接,自由排版) 2.验证码功能(后台有是否显示开关) 3.信息管理功能(信息审核 信息推荐 信息修改 信息删除) 4.IP封锁功能(可以屏蔽不良的发布者IP) 5.非法信息过滤(后台可设置不良的非法关键字 以便前台可以屏蔽) 6.强大的信息检索功能 7.模板自定义功能(网站主程序和模板分离,方便自由开发风格界面) 8.分类栏目自定义功能(网站栏目可以在后台自定义为任何行业的内容分类不限个数,自由添加删除修改排序) 9.评论管理(每条信息都可以有网民互动评论) 10.单页自定义功能(可自由添加介绍性的单页) 11.友情链接功能 12.模板标签管理(可以方便模板制作和调用) 13.广告管理(可以任意添加广告位 图片文字都可) 14.关键字管理 15.增加了首页电话和qq在线展示的功能 16.增加了便民114 电话展示功能 可自定义颜色! 17.全面更新了页面ui和布局 达到完美美化! 。。。。。 ====================== 上传到网站根目录即可使用 默认后台地址:您的网址/admin/ 默认账号/密码 admin/admin ======================= 本期发布的版本功能大致就这些。后续会慢慢更新更多更强大的功能 如增加会员注册系统 增加开放平台QQ登陆 以及信息带采集等。请持续关注讯客 分类信息 www.xookee.com 有不会用的朋友可以找我帮助 技术支持:QQ2863494134;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值