JavaScript,封装库--下拉菜单

封装库,增加了3个方法

shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码)

xian_shi()方法,设置元素显示,无参

yin_cang()方法,设置元素隐藏,无参

/**
*feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀
**/ /** 前台调用
* 每次调用$()创建库对象,使其每次调用都是独立的对象
* $()创建库对象,有一个可选参数this,就是当前对象本身
* 在前台调用获取到元素对象执行函数时,在函数里要再次获取刚才获取的元素对象可以将this传入$(),如:$(this)就代表了当前对象
* _this 接收的$()创建库对象传入的this
**/
var $ = function (_this) {
return new feng_zhuang_ku(_this);
}; /**
*定义封装库构造函数,类库
**/
function feng_zhuang_ku(_this) {
/** jie_dian属性,创建数组,初始化,保存获取到的元素节点,返回数组
**/
this.jie_dian = [];
if (_this != undefined) {
this.jie_dian[0] = _this;
}
} /**对象说明:
* this表示对象本身
* 使用库,首先要 $() 创建对象
* 再在创建的对象下调用方法或者属性
*
* 大纲:
* 获取元素标签开始,行号18
* 元素节点操作开始,行号64
*
*
**/ /**------------------------------------------------获取元素标签开始--------------------------------------------**/
/**获取元素标签说明:
* jie_dian属性,保存获取到的元素节点,返回数组,
* huo_qu_id()方法,通过id获取元素标签,适用于获取单个节点,
* huo_qu_name_zhi()方法,通过元素name值获取指定元素,适用于获取表单元素,
* huo_qu_name()方法,通过标签名称获取相同标签名的元素,
* huo_qu_class()方法,获取相同class属性的节点,将获取到的节点添加到jie_dian属性
* guo_lv_jie_dian()方法,获取多个节点时,过滤jie_dian属性里的数组,就是过滤掉指定索引外的元素对象
**/ /** huo_qu_id()方法,通过id获取元素标签,参数是id值,将获取到的元素对象添加到,jie_dian属性,适用于获取单个节点
**/
feng_zhuang_ku.prototype.huo_qu_id = function (id) {
this.jie_dian.push(document.getElementById(id));
return this;
}; /** huo_qu_name_zhi()方法,通过元素name值获取指定元素,参数是元素name值,返回元素相同name值对象集合,
* 循环元素集合,将每次循环到的元素对象添加到 jie_dian属性,适用于获取表单元素
**/
feng_zhuang_ku.prototype.huo_qu_name_zhi = function (name) {
var name_zhi = document.getElementsByName(name);
for (var i = 0; i < name_zhi.length; i++) {
this.jie_dian.push(name_zhi[i]);
}
return this;
}; /** huo_qu_name()方法,通过标签名称获取相同标签名的元素,
* 两个参数:获取指定id下的相同标签元素,参数1标签名称,参数2指定区域id值
* 一个参数:获取页面所有相同标签元素,参数是标签名称
**/
feng_zhuang_ku.prototype.huo_qu_name = function (tag, idname) {
var node = null;
if (arguments.length == 2) {
node = document.getElementById(idname);
} else {
node = document;
}
var name = node.getElementsByTagName(tag);
for (var i = 0; i < name.length; i++) {
this.jie_dian.push(name[i]);
}
return this;
}; /** huo_qu_class()方法,获取相同class属性的节点,将获取到的节点添加到jie_dian属性
* 一个参数:获取整个页面指定的class属性节点,参数是class属性值
* 两个参数:获取指定id区域里的class属性节点,参数1是class属性值,参数2是指定区域的id值
**/
feng_zhuang_ku.prototype.huo_qu_class = function (name, idname) {
var node = null;
if (arguments.length == 2) {
node = document.getElementById(idname);
} else {
node = document;
}
var all = node.getElementsByTagName('*');
for (var i = 0; i < all.length; i++) {
if (all[i].className == name) {
this.jie_dian.push(all[i]);
}
}
return this;
}; /** guo_lv_jie_dian()方法,获取多个节点时,过滤jie_dian属性里的数组,就是过滤掉指定索引外的元素对象
* 参数是要保留jie_dian属性里的对象索引
**/
feng_zhuang_ku.prototype.guo_lv_jie_dian = function (num) {
var element = this.jie_dian[num];
this.jie_dian = [];
this.jie_dian[0] = element;
return this;
}; /**------------------------------------------------获取元素标签结束--------------------------------------------**/ /**------------------------------------------------元素节点操作开始--------------------------------------------**/
/**元素节点操作说明:
* css()方法,给获取到的元素设置ss样式,或者获取css样式,
* wen_ben()方法,给获取到的元素设置文本,或者获取文本
* click()方法,给获取到的元素添加一个点击事件,参数是一个匿名函数(包含函数功能),
* tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀
* yi_chu_class()方法,给获取到的元素移除class属性,参数是要移除的class属性值,可以连缀
* she_zhi_link_css()方法,设置link连接、或style内嵌、中的CSS样式
* yi_chu_link_css()方法,移除link连接、或style内嵌、中的CSS样式
**/ /** css()方法,给获取到的元素设置ss样式,或者获取css样式,
* 两个参数:设置样式,参数1样式名称,参数2样式值,设置的行内样式
* 一个参数:获取样式,参数是样式名称,无法连缀,获取即可用获取行内也可以获取连接
**/
feng_zhuang_ku.prototype.css = function (attr, value) {
for (var i = 0; i < this.jie_dian.length; i++) {
if (arguments.length == 1) {
if (typeof window.getComputedStyle != 'undefined') { //w3c
return window.getComputedStyle(this.jie_dian[i], null)[attr];
} else if (typeof this.jie_dian[i].currentStyle != 'undefined') { //ie
return this.jie_dian[i].currentStyle[attr];
}
} else {
this.jie_dian[i].style[attr] = value;
}
}
return this;
}; /** wen_ben()方法,给获取到的元素设置文本,或者获取文本
* 有参:设置文本,参数是要设置的文本字符串。
* 无参:获取文本。无法连缀
**/
feng_zhuang_ku.prototype.wen_ben = function (str) {
for (var i = 0; i < this.jie_dian.length; i++) {
if (arguments.length == 0) {
return this.jie_dian[i].innerHTML;
}
this.jie_dian[i].innerHTML = str;
}
return this;
}; /** click()方法,给获取到的元素添加一个点击事件,参数是一个匿名函数(包含函数功能),
* 循环jie_dian属性里的节点,将每次循环的节点添加元素点击事件
**/
feng_zhuang_ku.prototype.click = function (fu) {
for (var i = 0; i < this.jie_dian.length; i++) {
this.jie_dian[i].onclick = fu;
}
return this;
}; /** tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀
**/
feng_zhuang_ku.prototype.tian_jia_class = function (classname) {
for (var i = 0; i < this.jie_dian.length; i++) {
if (!this.jie_dian[i].className.match(new RegExp('(\\s|^)' + classname + '(\\s|$)'))) {
this.jie_dian[i].className += ' ' + classname;
}
}
return this;
}; /** yi_chu_class()方法,给获取到的元素移除class属性,参数是要移除的class属性值,可以连缀
**/
feng_zhuang_ku.prototype.yi_chu_class = function (classname) {
for (var i = 0; i < this.jie_dian.length; i++) {
if (this.jie_dian[i].className.match(new RegExp('(\\s|^)' + classname + '(\\s|$)'))) {
this.jie_dian[i].className = this.jie_dian[i].className.replace(new RegExp('(\\s|^)' + classname + '(\\s|$)'), ' ');
}
}
return this;
}; /** she_zhi_link_css()方法,设置link连接、或style内嵌、中的CSS样式
* 在Web应用中,很少用到添加CSS规则和移除CSS规则,一般只用行内和Class;因为添加和删除原本的规则会破坏整个CSS的结构,所以使用需要非常小心。
* 直接在库对象下使用 如:$().she_zhi_link_css()
* 四个参数:
* 参数1,样式表索引位置,就是要操作的样式表位置索引,第几个样式表【数值】
* 参数2,要添加的选择器名称,【字符串】
* 参数3,要添加的样式名称和值,如:background:#ff2a16 【字符串】
* 参数4,将样式和选择器添加到样式表什么位置,【数值】
**/
feng_zhuang_ku.prototype.she_zhi_link_css = function (num, selectorText, cssText, position) {
var sheet = document.styleSheets[num];
if (typeof sheet.insertRule != 'undefined') {
sheet.insertRule(selectorText + "{" + cssText + "}", position);
} else if (typeof sheet.addRule != 'undefined') {
sheet.addRule(selectorText, cssText, position);
}
return this;
}; /** yi_chu_link_css()方法,移除link连接、或style内嵌、中的CSS样式
* 在Web应用中,很少用到添加CSS规则和移除CSS规则,一般只用行内和Class;因为添加和删除原本的规则会破坏整个CSS的结构,所以使用需要非常小心。
* 直接在库对象下使用
* 两个参数:
* 参数1,样式表索引位置,就是要操作的样式表位置索引,第几个样式表【数值】
* 参数2,删除样式表里的第几个选择器【数值】
**/
feng_zhuang_ku.prototype.yi_chu_link_css = function (num, position) {
var sheet = document.styleSheets[num];
if (typeof sheet.deleteRule != 'undefined') {
sheet.deleteRule(position);
} else if (typeof sheet.removeRule) {
sheet.removeRule(position);
}
return this;
};
/**------------------------------------------------元素节点操作结束--------------------------------------------**/ /**------------------------------------------------元素事件开始--------------------------------------------**/
/**元素事件说明:
* shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码)
* xian_shi()方法,设置元素显示,无参
* yin_cang()方法,设置元素隐藏,无参
**/ /** shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码)
*参数1是移入时的执行函数(包含代码)
*参数2是移出时的执行函数(包含代码)
**/
feng_zhuang_ku.prototype.shu_biao_yi_ru_yi_chu = function (yi_ru, yi_chu) {
for (var i = 0; i < this.jie_dian.length; i ++) {
this.jie_dian[i].onmouseover = yi_ru;
this.jie_dian[i].onmouseout = yi_chu;
}
return this;
}; /** xian_shi()方法,设置元素显示,无参
**/
feng_zhuang_ku.prototype.xian_shi = function () {
for (var i = 0; i < this.jie_dian.length; i++) {
this.jie_dian[i].style.display = 'block';
}
return this;
}; /** yin_cang()方法,设置元素隐藏,无参
**/
feng_zhuang_ku.prototype.yin_cang = function () {
for (var i = 0; i < this.jie_dian.length; i ++) {
this.jie_dian[i].style.display = 'none';
}
return this;
}; /**------------------------------------------------元素事件结束--------------------------------------------**/

下拉菜单

html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript讲解</title>
<link rel="stylesheet" title='xxx' type="text/css" href="1.css">
<script type="text/javascript" src="feng_zhuang_ku.js" charset="utf-8"></script>
<script type="text/javascript" src="1.js" charset="utf-8"></script>
</head>
<body>
<div id="tou">
<div class="logo"><img src="img/logo.gif" alt=""></div>
<div class="ge_ren_zhong_xin">个人中心
<ul>
<li><a href="#">设置</a></li>
<li><a href="#">换肤</a></li>
<li><a href="#">帮助</a></li>
<li><a href="#">退出</a></li>
</ul>
</div>
</div>
</body>
</html>

  

css代码

@charset "utf-8";
*{
margin:;
padding:;
}
body{
background: url("img/header_bg.png") repeat-x;
font-size:14px;
}
#tou{
width: 900px;
height: 30px;
margin: 0 auto;
}
.logo{
width: 100px;
height: 30px;
float: left;
}
.ge_ren_zhong_xin{
position: relative;
width: 70px;
height: 30px;
line-height: 30px;
float: right;
background: url("img/arrow.png") no-repeat right center;
cursor: pointer;
}
ul{
width: 100px;
height: 110px;
list-style-type: none;
position: absolute;
top:30px;
right: -15px;
background:#FBF7E1;
border:1px solid #999;
border-top:none;
padding:10px 0 0 0;
display:none;
}
ul li {
height:25px;
line-height:25px;
text-indent:20px;
letter-spacing:1px;
}
ul li a {
display:block;
text-decoration:none;
color:#333;
background:url("img/arrow3.gif") no-repeat 5px 45%;
}
ul li a:hover {
background:#fc0 url("img/arrow4.gif") no-repeat 5px 45%;
}

  

前台调用js代码

//前台调用代码
window.onload = function (){
//获取到个人中心元素节点,执行鼠标移入移出方法
$().huo_qu_class('ge_ren_zhong_xin','tou').shu_biao_yi_ru_yi_chu(function () {
//当鼠标移入时,改变个人中心背景图片
$(this).css('background', 'url(img/arrow2.png) no-repeat right center');
//当鼠标移入时,将ul元素执行显示方法
$().huo_qu_name('ul').xian_shi();
}, function () {
//当鼠标移出时,改变个人中心背景图片
$(this).css('background', 'url(img/arrow.png) no-repeat right center');
//当鼠标移出时,将ul元素执行隐藏方法
$().huo_qu_name('ul').yin_cang();
});
};

第一百三十二节,JavaScript,封装库--下拉菜单的更多相关文章

  1. 第一百五十二节,封装库--JavaScript,表单验证--年月日注入

    封装库--JavaScript,表单验证--年月日注入 效果图 html <div id="reg"> <h2 class="tuo"> ...

  2. Javascript版选择下拉菜单互移且排序

    效果图如下: 代码如下: <html> <head> <title>Javascript版选择下拉菜单互移且排序</title> <meta ht ...

  3. js面向对象封装级联下拉菜单列表

    本实例开发的级联下拉菜单是根据已有json数据创建的DOM元素.点击文本框后,显示一级菜单.如果菜单中包含子菜单,菜单右侧会有指示箭头.点击菜单之后,会再显示下一级菜单,以此类推.当菜单下无子菜单时, ...

  4. Bootstrap_下拉菜单

    在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件. 一.普通下拉菜单 <div class="dropdown"&g ...

  5. Bootstrap下拉菜单

    前面的话 网页交互的时候经常会需要上下文菜单或者隐藏/显示菜单项,Bootstrap默认提供了用于显示链接列表的可切换.有上下文的菜单.而且在各种交互状态下的菜单展示需要和javascript插件配合 ...

  6. 一个常见下拉菜单的样式:一体化小三角(纯css手写解决)

    类似下拉菜单2个一体化小三角,习惯上用字体图标加jQuery处理,比较方便,但是下面纯css手写解决方式,效果也还不错,对CSS知识也是一个比较好的孔固. 小三角用了2种不同处理方式:1.利用bord ...

  7. 用纯css实现下拉菜单的几种方式

    第一种:display:none和display:block切换 <!DOCTYPE html> <html lang="en"> <head> ...

  8. CSS实现下拉菜单的几种方法

    PS:转自https://www.cnblogs.com/yewenxiang/p/6064117.html 第一种:display:none和display:block切换 1 <!DOCTY ...

  9. 第一百四十八节,封装库--JavaScript,菜单切换

    第一百四十八节,封装库--JavaScript,菜单切换 首先在封装库封装点击切换方法 /** dian_ji_qie_huan()方法,设置点击切换,将元素设置成点击切换,也就是点击目标元素后,循环 ...

随机推荐

  1. Asp.Net Web Api 接口,拥抱支持跨域访问。

    如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问. 由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题 ...

  2. java中实现与.net的format格式化字符串输出

    Java中的格式化字符串 System.out.println(MessageFormat.format("name={0}", "张三")); .net中的格 ...

  3. 微软 PowerShell Script Explorer

    微软 PowerShell Script Explorer 满血复活,正式发布 一年前的今天,微软在其Windows PowerShell官方博客声明中止 ‘Script Explorer’ 应用程序 ...

  4. DIP And DI

    依赖倒置(DIP)与依赖注入(DI)   依赖倒置原则(Dependency Inversion Principle)为我们提供了降低模块间耦合度的一种思路,依赖注入(Dependency Injec ...

  5. 获得WCF Client端的本地端口

    获得WCF Client端的本地端口 最近需要做个小功能,当WCF调用远程服务时,显示该调用的网速或流量.其中比较关键的一步就是需要获得WCF  Client端的本地端口,原来以为是个简单的事情,结果 ...

  6. MVC应用程序请求密码的功能1

    MVC应用程序请求密码的功能(一) 经过一系列的练习,实现了会员注册<MVC会员注册>http://www.cnblogs.com/insus/p/3439599.html,登录<M ...

  7. ios中判断控制台Log输出控制,是否是iphone5,自动调整尺寸

    // 控制台Log输出控制,此确保在release版本下无Log输出 #ifdef DEBUG #define CMBLOG          NSLog #else #define CMBLOG  ...

  8. SVN下错误集锦

    SVN下错误集锦 一SVN下的文件被locked不能update和commit 最近做项目的时候,遇到这个问题,SVN下的文件被locked不能update和commit.其提示如下: 解决办法:执行 ...

  9. discuz 门户页模板中的keywords和description不能正常显示

    最近用discuz搭建了一个素食网,在处理门户页模板时,发现虽然在后台的seo设置了keywords和description,但是以游客的身份访问时,不显示后台设置的内容,显示为: <meta ...

  10. 在MVC中添加异常增加日志

    MVC的结构非常棒,基本你能想到注入的地方都可以找到地方,譬如IActionFilter,IResultFilter,IAuthorizationFilter以及IExceptionFilter 以下 ...