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. Linux Shell脚本入门--Uniq命令

    uniq uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [ ...

  2. 由浅入深学习.NET CLR 系列:目录

    经过对Android的一阵折腾,些许熟悉了一些Java的东东,又开始转战.NET.我觉得学习最好和工作不要相离太远,才会更加随笔随意,索性整理一些比较系统的.NET的基础知识学习学习.一提起学习.NE ...

  3. SQL面试题1

    SQL面试题 Sql常用语法 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言 ...

  4. 动态操作表格行(兼容IE、火狐)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. IS_EER分析

    下面我们就来具体分析一下这段代码,看看内核中的巧妙设计思路. 要想明白IS_ERR(),首先理解要内核空间.所有的驱动程序都是运行在内核空间,内核空间虽然很大,但总是有限的,而在这有限的空间中,其最后 ...

  6. 用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

    用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署 这是微软官方SignalR 2.0教程Getting Started with En ...

  7. js理解

    js-提前声明和new操作符理解   1.提前声明:声明变量后,js会把声明部分提前到作用域前面. var a=1; function aheadOfStatement(){ alert(a); va ...

  8. Windows服务、批处理项目实战

    一周一话题之三(Windows服务.批处理项目实战)   -->目录导航 一. Windows服务 1. windows service介绍 2. 使用步骤 3. 项目实例--数据上传下载服务 ...

  9. 释放c盘空间

    Win7的系统引导盘用着用着会越来越小.怎么办呢?我以前在网上查过资料,说是找个工具加大C盘.我加了,从原来的20G加到现在的35G.用了一段时间后,空间又只剩几百M了.难道又要加?? 后来,在网上找 ...

  10. C# 号码归属地查询算法

    C# 号码归属地查询算法(根据Android来电归属地二进制文件查询修改) 前言 近期有个项目需要用到号码归属查询,归属地数据库可能比不上ip138,淘宝上也有卖的-,-! 文本提供一个279188条 ...