JavaScript,封装库--修改元素选择器

就是将构造库函数修改成元素选择器,像css那样,输入#xxx .xxx xxx  (获取指定id下的指定class下的指定标签元素

修改后的基础库

  1. /**
  2. *feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀
  3. **/
  4.  
  5. /** 前台调用
  6. * 每次调用$()创建库对象,使其每次调用都是独立的对象
  7. * $()创建库对象,有一个可选参数,参数有两种方式,1是传入的this,2是传入的字符串
  8. * 可选参数说明:
  9. * 传入的this,this,就是当前对象本身
  10. * 传入的字符串,代表获取元素选择器
  11. * 参数是元素选择器(id值、class值、标签名称)其中一样的字符串方式,或者是其中几样的字符串组合方式
  12. * 获取一个元素传参方式 '#xxx'( 表示获取id),'.xxx'(表示获取class),'xxx'(表示获取标签)
  13. * 从父元素向下获取组合方式按照,一个元素传参方式加上空格,如: ('#sdf .hjk p')表示获取id为sdf元素下的class为hjk下的p元素
  14. **/
  15. var $ = function (args) {
  16. return new feng_zhuang_ku(args);
  17. };
  18.  
  19. /**
  20. *定义封装库构造函数,类库
  21. **/
  22. function feng_zhuang_ku(args) {
  23. /** jie_dian属性,创建数组,初始化,保存获取到的元素节点,返回数组
  24. **/
  25. this.jie_dian = [];
  26. if (typeof args == 'string') { //如果传入的是字符串,说明是获取元素选择器
  27. if (args.indexOf(' ') != -1) {
  28. /**从父元素向下获取组合方式**/
  29. var fen_ge = args.split(' '); //将接收的组合式元素名称分割成数组
  30. var lin_shi = []; //保存临时对象的数组,解决被覆盖问题
  31. var fu_yuan_su = []; //保存父元素的数组
  32. for (var i = 0; i < fen_ge.length; i++) {
  33. if (fu_yuan_su.length == 0)fu_yuan_su.push(document); //如果没有父节点,就把document放入父节点
  34. switch (fen_ge[i].charAt(0)) { //判断字符串的第一个字符是什么
  35. case '#': //说明是id
  36. lin_shi = []; //清理临时数组,以便父节点失效,子节点有效
  37. lin_shi.push(this.huo_qu_id(fen_ge[i].substring(1))); //去除第一个字符,获取到传入的id元素,保存到临时数组
  38. fu_yuan_su = lin_shi; //将临时节点数组放入父节点数字
  39. break; //说明是class
  40. case '.':
  41. lin_shi = []; //清理临时数组,以便父节点失效,子节点有效
  42. for (var f = 0; f < fu_yuan_su.length; f++) { //根据父节点的长度循环
  43. var tempss = this.huo_qu_class(fen_ge[i].substring(1), fu_yuan_su[f]); //获取到父节点下的子节点
  44. for (var n = 0; n < tempss.length; n++) { //循环子节点,将每次循环的子节点添加到临时数组
  45. lin_shi.push(tempss[n]);
  46. }
  47. }
  48. fu_yuan_su = lin_shi; //将临时节点数组放入父节点数字
  49. break;
  50. default: //说明是标签
  51. lin_shi = []; //清理临时数组,以便父节点失效,子节点有效
  52. for (var j = 0; j < fu_yuan_su.length; j++) { //根据父节点的长度循环
  53. var temps = this.huo_qu_name(fen_ge[i], fu_yuan_su[j]); //获取到父节点下的子节点
  54. for (var k = 0; k < temps.length; k++) { //循环子节点,将每次循环的子节点添加到临时数组
  55. lin_shi.push(temps[k]);
  56. }
  57. }
  58. fu_yuan_su = lin_shi; //将临时节点数组放入父节点数字
  59. }
  60. }
  61. this.jie_dian = lin_shi; //将临时数组放入jie_dian数组
  62. } else {
  63. /**一个元素传参方式**/
  64. switch (args.charAt(0)) { //判断字符串的第一个字符是什么
  65. case '#': //说明是id
  66. this.jie_dian.push(this.huo_qu_id(args.substring(1))); //去除第一个字符,获取到传入的id元素
  67. break;
  68. case '.': //说明是class
  69. this.jie_dian = this.huo_qu_class(args.substring(1)); //去除第一个字符,获取到传入的class元素
  70. break;
  71. default: //说明是标签
  72. this.jie_dian = this.huo_qu_name(args); //获取到传入的标签元素
  73. }
  74. }
  75. } else if (typeof args == 'object') { //如果传入的是对象,说明是this,就是当前对象本身
  76. if (args != undefined) {
  77. this.jie_dian[0] = args;
  78. }
  79. }
  80. }
  81.  
  82. /**$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$**/
  83.  
  84. /**$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$**/
  85.  
  86. /**------------------------------------------------获取元素标签开始--------------------------------------------**/
  87. /**获取元素标签说明:
  88. * jie_dian属性,保存获取到的元素节点,返回数组,
  89. *
  90. * huo_qu_id()方法,通过id获取元素标签,参数是id值,将获取到的元素对象返回给方法本身,无法连缀
  91. * huo_qu_name()方法,通过标签名称获取相同标签名的元素,
  92. * huo_qu_class()方法,获取相同class属性的节点,返回包含相同class属性的节点数组,返回给方法本身,无法连缀
  93. *
  94. * huo_qu_name_zhi()方法,通过元素name值获取指定元素,适用于获取表单元素,
  95. * guo_lv_jie_dian()方法,获取多个节点时,过滤jie_dian属性里的数组,就是过滤掉指定索引外的元素对象
  96. * huo_qu_zi_jie_dian()方法,获取一个元素下的子元素
  97. **/
  98.  
  99. /** huo_qu_id()方法,通过id获取元素标签,参数是id值,将获取到的元素对象返回给方法本身,无法连缀
  100. **/
  101. feng_zhuang_ku.prototype.huo_qu_id = function (id) {
  102. return document.getElementById(id);
  103. };
  104.  
  105. /** huo_qu_name()方法,通过标签名称获取相同标签名的元素,返回包含相同标签名的元素数组,返回给方法本身
  106. * 两个参数:获取指定元素下的相同标签元素,参数1标签名称,参数2是要获取元素的父元素
  107. * 一个参数:获取页面所有相同标签元素,参数是标签名称
  108. **/
  109. feng_zhuang_ku.prototype.huo_qu_name = function (tag, parentnode) {
  110. var node = null;
  111. var lin_shi = [];
  112. if (parentnode != undefined) {
  113. node = parentnode;
  114. } else {
  115. node = document;
  116. }
  117. var tags = node.getElementsByTagName(tag);
  118. for (var i = 0; i < tags.length; i++) {
  119. lin_shi.push(tags[i]);
  120. }
  121. return lin_shi;
  122. };
  123.  
  124. /** huo_qu_class()方法,获取相同class属性的节点,返回包含相同class属性的节点数组,返回给方法本身,无法连缀
  125. * 一个参数:获取整个页面指定的class属性节点,参数是class属性值
  126. * 两个参数:获取指定元素区下的class属性节点,参数1是class属性值,参数2是要获取class属性节点的父元素节点
  127. **/
  128. feng_zhuang_ku.prototype.huo_qu_class = function (name, parentnode) {
  129. var node = null;
  130. var lin_shi = [];
  131. if (parentnode != undefined) {
  132. node = parentnode;
  133. } else {
  134. node = document;
  135. }
  136. var all = node.getElementsByTagName('*');
  137. for (var i = 0; i < all.length; i++) {
  138. if (all[i].className == name) {
  139. lin_shi.push(all[i]);
  140. }
  141. }
  142. return lin_shi;
  143. };
  144.  
  145. /** huo_qu_name_zhi()方法,通过元素name值获取指定元素,参数是元素name值,返回元素相同name值对象集合,
  146. * 循环元素集合,将每次循环到的元素对象添加到 jie_dian属性,适用于获取表单元素
  147. **/
  148. feng_zhuang_ku.prototype.huo_qu_name_zhi = function (name) {
  149. var name_zhi = document.getElementsByName(name);
  150. for (var i = 0; i < name_zhi.length; i++) {
  151. this.jie_dian.push(name_zhi[i]);
  152. }
  153. return this;
  154. };
  155.  
  156. /** guo_lv_jie_dian()方法,获取多个节点时,过滤jie_dian属性里的数组,就是过滤掉指定索引外的元素对象
  157. * 参数是要保留jie_dian属性里的对象索引
  158. **/
  159. feng_zhuang_ku.prototype.guo_lv_jie_dian = function (num) {
  160. var element = this.jie_dian[num];
  161. this.jie_dian = [];
  162. this.jie_dian[0] = element;
  163. return this;
  164. };
  165.  
  166. /** huo_qu_zi_jie_dian()方法,获取一个元素下的子元素
  167. * 注意首先要获取到父元素,在使用huo_qu_zi_jie_dian()方法
  168. * 参数是要获取的,子元素(id值、class值、标签名称)其中一样的字符串方式,
  169. * 传参方式 '#xxx'( 表示获取id),'.xxx'(表示获取class),'xxx'(表示获取标签)
  170. **/
  171. feng_zhuang_ku.prototype.huo_qu_zi_jie_dian = function (str) {
  172. var lin_shi = []; //临时数组
  173. for (var i = 0; i < this.jie_dian.length; i++) { //根据父元素的长度,循环出父元素
  174. switch (str.charAt(0)) { //判断字符串的第一个字符是什么
  175. case '#': //说明是id
  176. lin_shi.push(this.huo_qu_id(str.substring(1))); //获取到父元素下的子元素id等于str的标签,将它添加到临时数组
  177. break;
  178. case '.': //说明是class
  179. var tempss = this.huo_qu_class(str.substring(1), this.jie_dian[i]);
  180. for (var k = 0; k < tempss.length; k++) {
  181. lin_shi.push(tempss[k]);
  182. }
  183. break;
  184. default: //说明是标签名称
  185. var temps = this.huo_qu_name(str, this.jie_dian[i]);
  186. for (var j = 0; j < temps.length; j++) {
  187. lin_shi.push(temps[j]);
  188. }
  189. }
  190. }
  191. this.jie_dian = lin_shi; //将临时数组替换成节点数组
  192. return this;
  193. };
  194.  
  195. /**------------------------------------------------获取元素标签结束--------------------------------------------**/
  196.  
  197. /**------------------------------------------------元素节点操作开始--------------------------------------------**/
  198. /**元素节点操作说明:
  199. * c_css()方法,给获取到的元素设置ss样式,或者获取css样式,
  200. * wen_ben()方法,给获取到的元素设置文本,或者获取文本
  201. * tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀
  202. * yi_chu_class()方法,给获取到的元素移除class属性,参数是要移除的class属性值,可以连缀
  203. * she_zhi_link_css()方法,设置link连接、或style内嵌、中的CSS样式
  204. * yi_chu_link_css()方法,移除link连接、或style内嵌、中的CSS样式
  205. **/
  206.  
  207. /** c_css()方法,给获取到的元素设置ss样式,或者获取css样式,
  208. * 两个参数:设置样式,参数1样式名称,参数2样式值,设置的行内样式
  209. * 一个参数:获取样式,参数是样式名称,无法连缀,获取即可用获取行内也可以获取连接
  210. **/
  211. feng_zhuang_ku.prototype.c_css = function (attr, value) {
  212. for (var i = 0; i < this.jie_dian.length; i++) {
  213. if (arguments.length == 1) {
  214. return getStyle(this.jie_dian[i], attr); //getStyle()函数库函数,跨浏览器获取元素Style,样式指定属性
  215. } else {
  216. this.jie_dian[i].style[attr] = value;
  217. }
  218. }
  219. return this;
  220. };
  221.  
  222. /** wen_ben()方法,给获取到的元素设置文本,或者获取文本
  223. * 有参:设置文本,参数是要设置的文本字符串。
  224. * 无参:获取文本。无法连缀
  225. **/
  226. feng_zhuang_ku.prototype.wen_ben = function (str) {
  227. for (var i = 0; i < this.jie_dian.length; i++) {
  228. if (arguments.length == 0) {
  229. return this.jie_dian[i].innerHTML;
  230. }
  231. this.jie_dian[i].innerHTML = str;
  232. }
  233. return this;
  234. };
  235.  
  236. /** tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀
  237. **/
  238. feng_zhuang_ku.prototype.tian_jia_class = function (classname) {
  239. for (var i = 0; i < this.jie_dian.length; i++) {
  240. if (hasClass(this.jie_dian[i], classname)) { //hasClass()函数库函数,判断一个元素的class属性值是否存在
  241. this.jie_dian[i].className += ' ' + classname;
  242. }
  243. }
  244. return this;
  245. };
  246.  
  247. /** yi_chu_class()方法,给获取到的元素移除class属性,参数是要移除的class属性值,可以连缀
  248. **/
  249. feng_zhuang_ku.prototype.yi_chu_class = function (classname) {
  250. for (var i = 0; i < this.jie_dian.length; i++) {
  251. if (hasClass(this.jie_dian[i], classname)) {
  252. this.jie_dian[i].className = this.jie_dian[i].className.replace(new RegExp('(\\s|^)' + classname + '(\\s|$)'), ' ');
  253. }
  254. }
  255. return this;
  256. };
  257.  
  258. /** she_zhi_link_css()方法,设置link连接、或style内嵌、中的CSS样式
  259. * 在Web应用中,很少用到添加CSS规则和移除CSS规则,一般只用行内和Class;因为添加和删除原本的规则会破坏整个CSS的结构,所以使用需要非常小心。
  260. * 直接在库对象下使用 如:$().she_zhi_link_css()
  261. * 四个参数:
  262. * 参数1,样式表索引位置,就是要操作的样式表位置索引,第几个样式表【数值】
  263. * 参数2,要添加的选择器名称,【字符串】
  264. * 参数3,要添加的样式名称和值,如:background:#ff2a16 【字符串】
  265. * 参数4,将样式和选择器添加到样式表什么位置,【数值】
  266. **/
  267. feng_zhuang_ku.prototype.she_zhi_link_css = function (num, selectorText, cssText, position) {
  268. var sheet = document.styleSheets[num];
  269. if (typeof sheet.insertRule != 'undefined') {
  270. sheet.insertRule(selectorText + "{" + cssText + "}", position);
  271. } else if (typeof sheet.addRule != 'undefined') {
  272. sheet.addRule(selectorText, cssText, position);
  273. }
  274. return this;
  275. };
  276.  
  277. /** yi_chu_link_css()方法,移除link连接、或style内嵌、中的CSS样式
  278. * 在Web应用中,很少用到添加CSS规则和移除CSS规则,一般只用行内和Class;因为添加和删除原本的规则会破坏整个CSS的结构,所以使用需要非常小心。
  279. * 直接在库对象下使用
  280. * 两个参数:
  281. * 参数1,样式表索引位置,就是要操作的样式表位置索引,第几个样式表【数值】
  282. * 参数2,删除样式表里的第几个选择器【数值】
  283. **/
  284. feng_zhuang_ku.prototype.yi_chu_link_css = function (num, position) {
  285. var sheet = document.styleSheets[num];
  286. if (typeof sheet.deleteRule != 'undefined') {
  287. sheet.deleteRule(position);
  288. } else if (typeof sheet.removeRule) {
  289. sheet.removeRule(position);
  290. }
  291. return this;
  292. };
  293. /**------------------------------------------------元素节点操作结束--------------------------------------------**/
  294.  
  295. /**------------------------------------------------元素事件开始--------------------------------------------**/
  296. /**元素事件说明:
  297. * shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码)
  298. * xian_shi()方法,设置元素显示,无参
  299. * yin_cang()方法,设置元素隐藏,无参
  300. * on_click()方法,给获取到的元素添加一个点击事件,参数是一个匿名函数(包含函数功能),
  301. * yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,
  302. * chuang_kou_shi_jian()方法,浏览器窗口事件,当窗口的大小变化时触发函数
  303. * zhe_zhao_suo_ping()方法,将一个区块元素设置成遮罩锁屏区块
  304. **/
  305.  
  306. /** shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码)
  307. *参数1是移入时的执行函数(包含代码)
  308. *参数2是移出时的执行函数(包含代码)
  309. **/
  310. feng_zhuang_ku.prototype.shu_biao_yi_ru_yi_chu = function (yi_ru, yi_chu) {
  311. for (var i = 0; i < this.jie_dian.length; i++) {
  312. addEvent(this.jie_dian[i], 'mouseover', yi_ru);
  313. addEvent(this.jie_dian[i], 'mouseout', yi_chu);
  314. }
  315. return this;
  316. };
  317.  
  318. /** xian_shi()方法,设置元素显示,无参
  319. **/
  320. feng_zhuang_ku.prototype.xian_shi = function () {
  321. for (var i = 0; i < this.jie_dian.length; i++) {
  322. this.jie_dian[i].style.display = 'block';
  323. }
  324. return this;
  325. };
  326.  
  327. /** yin_cang()方法,设置元素隐藏,无参
  328. **/
  329. feng_zhuang_ku.prototype.yin_cang = function () {
  330. for (var i = 0; i < this.jie_dian.length; i++) {
  331. this.jie_dian[i].style.display = 'none';
  332. document.documentElement.style.overflow = 'auto';
  333. removeEvent(window, 'scroll', scrollTop); //遮罩锁屏时有用
  334. }
  335. return this;
  336. };
  337.  
  338. /** on_click()方法,给获取到的元素添加一个点击事件,参数是一个匿名函数(包含函数功能),
  339. * 循环jie_dian属性里的节点,将每次循环的节点添加元素点击事件
  340. **/
  341. feng_zhuang_ku.prototype.on_click = function (fu) {
  342. for (var i = 0; i < this.jie_dian.length; i++) {
  343. addEvent(this.jie_dian[i], 'click', fu);
  344. }
  345. return this;
  346. };
  347.  
  348. /** yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,
  349. * 注意:使用此方法时,首先要在css里将目标区块设置成(绝对定位,position: absolute;)
  350. **/
  351. feng_zhuang_ku.prototype.yuan_su_ju_zhong = function () {
  352. if (this.jie_dian.length == 1) {
  353. var yan_su = null;
  354. for (var i = 0; i < this.jie_dian.length; i++) {
  355. yan_su = this.jie_dian[i];
  356. }
  357. var y_style = getStyle(yan_su, 'display'); //getStyle()函数库函数,跨浏览器获取元素Style,样式指定属性
  358. if (y_style === "none") {
  359. yan_su.style.display = "block";
  360. }
  361. var width = yan_su.offsetWidth;
  362. var height = yan_su.offsetHeight;
  363. if (y_style === "none") {
  364. yan_su.style.display = "none";
  365. }
  366. var chang_w = getInner().width;
  367. var chang_h = getInner().height;
  368. var top = (chang_h - height) / 2;
  369. var left = (chang_w - width) / 2;
  370. for (var ii = 0; ii < this.jie_dian.length; ii++) {
  371. this.jie_dian[ii].style.top = top + 'px';
  372. this.jie_dian[ii].style.left = left + 'px';
  373. }
  374. } else {
  375. alert("区块元素页面居中,只能设置一个区块元素,目前jie_dian数组里是多个元素请检查!")
  376. }
  377. return this;
  378. };
  379.  
  380. /** chuang_kou_shi_jian()方法,浏览器窗口事件,当窗口的大小变化时触发函数
  381. * 接收一个参数,就是触发时要执行的函数(包含函数功能)
  382. **/
  383. feng_zhuang_ku.prototype.chuang_kou_shi_jian = function (fn) {
  384. for (var i = 0; i < this.jie_dian.length; i++) {
  385. var yan_su = this.jie_dian[i];
  386. }
  387. addEvent(window, 'resize', function () {
  388. fn();
  389. if (yan_su.offsetLeft > getInner().width - yan_su.offsetWidth) {
  390. yan_su.style.left = getInner().width - yan_su.offsetWidth + 'px';
  391. }
  392. if (yan_su.offsetTop > getInner().height - yan_su.offsetHeight) {
  393. yan_su.style.top = getInner().height - yan_su.offsetHeight + 'px';
  394. }
  395. });
  396. return this;
  397. };
  398.  
  399. /** zhe_zhao_suo_ping()方法,将一个区块元素设置成遮罩锁屏区块
  400. * 注意:一般需要在css文件将元素设置成隐藏
  401. **/
  402. feng_zhuang_ku.prototype.zhe_zhao_suo_ping = function () {
  403. if (this.jie_dian.length == 1) {
  404. var yan_su = null;
  405. for (var i = 0; i < this.jie_dian.length; i++) {
  406. yan_su = this.jie_dian[i];
  407. }
  408. var chang_w = getInner().width; //getInner()函数库函数,跨浏览器获取浏览器视窗大小
  409. var chang_h = getInner().height;
  410. yan_su.style.width = chang_w + 'px';
  411. yan_su.style.height = chang_h + 'px';
  412. yan_su.style.position = 'absolute';
  413. yan_su.style.top = '0';
  414. yan_su.style.left = '0';
  415. var y_style = getStyle(yan_su, 'display'); //getStyle()函数库函数,跨浏览器获取元素Style,样式指定属性
  416. if (y_style === "block") {
  417. document.documentElement.style.overflow = 'hidden';
  418. addEvent(window, 'scroll', scrollTop);
  419. } else if (y_style === 'none') {
  420. document.documentElement.style.overflow = 'auto';
  421. }
  422. } else {
  423. alert("遮罩锁屏区块,只能设置一个区块元素,目前jie_dian数组里是多个元素请检查!")
  424. }
  425. return this;
  426. };
  427.  
  428. /**------------------------------------------------元素事件结束--------------------------------------------**/
  429.  
  430. /**------------------------------------------------插件入口开始--------------------------------------------**/
  431. /** 插件入口,简单的理解就是通过extend()方法,向此基础库添加一个原型方法
  432. * 此extend()方法,一般是给插件文件使用的,插件就是通过extend()方法,将插件方法添加到基础库原型的
  433. * 接收两个参数
  434. * 参数1是传入要添加的方法名称
  435. * 参数2是此方法的执行函数(包含代码)
  436. **/
  437. feng_zhuang_ku.prototype.extend = function (name, fn) {
  438. feng_zhuang_ku.prototype[name] = fn;
  439. };
  440. /**------------------------------------------------插件入口结束--------------------------------------------**/

HTML代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>JavaScript讲解</title>
  6. <link rel="stylesheet" title='xxx' type="text/css" href="1.css">
  7. <script type="text/javascript" src="feng_zhuang_ku/han_shu/han_shu.js" charset="utf-8"></script>
  8. <script type="text/javascript" src="feng_zhuang_ku/feng_zhuang_ku.js" charset="utf-8"></script>
  9. <script type="text/javascript" src="feng_zhuang_ku/cha_jian/tuo_zhuai.js" charset="utf-8"></script>
  10. <script type="text/javascript" src="1.js" charset="utf-8"></script>
  11. </head>
  12. <body>
  13. <div id="tou">
  14. <div class="logo"><img src="img/logo.gif" alt=""></div>
  15. <div class="ge_ren_zhong_xin">个人中心
  16. <ul>
  17. <li><a href="#">设置</a></li>
  18. <li><a href="#">换肤</a></li>
  19. <li><a href="#">帮助</a></li>
  20. <li><a href="#">退出</a></li>
  21. </ul>
  22. </div>
  23. <div class="deng_lu">登录</div>
  24. </div>
  25. <div id="login">
  26. <h2 class="tbu"><img src="img/close.png" alt="" class="close" />网站登录</h2>
  27. <div class="user">帐 号:<input type="text" name="user" class="text" /></div>
  28. <div class="pass">密 码:<input type="password" name="pass" class="text" /></div>
  29. <div class="button"><input type="button" class="submit" value="" /></div>
  30. <div class="other">注册新用户 | 忘记密码?</div>
  31. </div>
  32. <div id="suo_ping">1</div>
  33. <input type="button" value="按钮" id="button" />
  34. <a href="http://www.yc60.com" id="a">瓢城Web俱乐部</a>
  35.  
  36. <div id="box">box</div>
  37.  
  38. <div id="jkf">
  39. <p>
  40. <span class="a">pspan</span>
  41. <span class="a">pspan</span>
  42. <span class="b">pspan</span>
  43. </p>
  44.  
  45. <p>
  46. <span class="a">pspan</span>
  47. <span>pspan</span>
  48. <span id="q">pspan</span>
  49. </p>
  50.  
  51. <div>
  52. <span class="a">pspan</span>
  53. <span>pspan</span>
  54. <span>pspan</span>
  55. </div>
  56. </div>
  57. <p>
  58. <span class="a">pspan</span>
  59. <span class="a">pspan</span>
  60. <span class="b">pspan</span>
  61. </p>
  62.  
  63. </body>
  64. </html>

css代码

  1. @charset "utf-8";
  2. * {
  3. margin:;
  4. padding:;
  5. /*color: #ff583d;*/
  6. }
  7. body{
  8. background: url("img/header_bg.png") repeat-x;
  9. font-size:14px;
  10. }
  11. #tou{
  12. width: 900px;
  13. height: 30px;
  14. margin: 0 auto;
  15. }
  16. .logo{
  17. width: 100px;
  18. height: 30px;
  19. float: left;
  20. }
  21. .ge_ren_zhong_xin{
  22. position: relative;
  23. width: 70px;
  24. height: 30px;
  25. line-height: 30px;
  26. float: right;
  27. background: url("img/arrow.png") no-repeat right center;
  28. cursor: pointer;
  29. }
  30. ul{
  31. width: 100px;
  32. height: 110px;
  33. list-style-type: none;
  34. position: absolute;
  35. top:30px;
  36. right: -15px;
  37. background:#FBF7E1;
  38. border:1px solid #999;
  39. border-top:none;
  40. padding:10px 0 0 0;
  41. display:none;
  42. }
  43. ul li {
  44. height:25px;
  45. line-height:25px;
  46. text-indent:20px;
  47. letter-spacing:1px;
  48. }
  49. ul li a {
  50. display:block;
  51. text-decoration:none;
  52. color:#333;
  53. background:url("img/arrow3.gif") no-repeat 5px 45%;
  54. }
  55. ul li a:hover {
  56. background:#fc0 url("img/arrow4.gif") no-repeat 5px 45%;
  57. }
  58.  
  59. /*登录*/
  60. #tou .deng_lu {
  61. width: 30px;
  62. height: 30px;
  63. float: right;
  64. line-height: 30px;
  65. margin-right: 10px;
  66. cursor: pointer;
  67. }
  68. /*登录框*/
  69. #login{
  70. width: 350px;
  71. height: 250px;
  72. border: 1px solid #ccc;
  73. position:absolute;
  74. display: none;
  75. z-index:;
  76. background-color: #fff;
  77. }
  78. #login h2{
  79. background: rgba(0, 0, 0, 0) url("img/login_header.png") repeat-x scroll 0 0;
  80. border-bottom: 1px solid #ccc;
  81. color: #666;
  82. font-size: 14px;
  83. height: 40px;
  84. line-height : 40px;
  85. text-align: center;
  86. letter-spacing: 1px;
  87. margin: 0 0 20px;
  88. cursor: move;
  89. }
  90. #login h2 img{
  91. cursor: pointer;
  92. float: right;
  93. position: relative;
  94. right: 8px;
  95. top: 14px;
  96. }
  97. #login div.user, #login div.pass {
  98. color: #666;
  99. font-size: 14px;
  100. padding: 5px 0;
  101. text-align: center;
  102. }
  103. #login input.text {
  104. background: #fff none repeat scroll 0 0;
  105. border: 1px solid #ccc;
  106. font-size: 14px;
  107. height: 25px;
  108. width: 200px;
  109. }
  110. #login .button {
  111. padding: 20px 0;
  112. text-align: center;
  113. }
  114. #login input.submit {
  115. background: rgba(0, 0, 0, 0) url("img/login_button.png") no-repeat scroll 0 0;
  116. border: medium none;
  117. cursor: pointer;
  118. height: 30px;
  119. width: 107px;
  120. }
  121. #login .other {
  122. color: #666;
  123. padding: 15px 10px;
  124. text-align: right;
  125. }
  126. /*遮罩锁屏区块*/
  127. #suo_ping{
  128. z-index:; /*注意:如果遮罩层上面有元素,它的层级要大于9998*/
  129. background: #000;
  130. filter: alpha(opacity=50);
  131. opacity: 0.5;
  132. display: none;
  133. }

前台js代码

  1. //前台调用代码
  2. addEvent(window, 'load', function () {
  3. //个人中心和登录框
  4. $('#tou .ge_ren_zhong_xin').shu_biao_yi_ru_yi_chu(function () { //获取到个人中心元素,执行鼠标移入移除方法
  5. $(this).c_css('background', 'url(img/arrow2.png) no-repeat right center'); //移入鼠标改变人中心背景图片
  6. $('.ge_ren_zhong_xin ul').xian_shi(); //移入鼠标显示个人中心下拉区块
  7. }, function () {
  8. $(this).c_css('background', 'url(img/arrow.png) no-repeat right center'); //移出鼠标改变人中心背景图片
  9. $('.ge_ren_zhong_xin ul').yin_cang(); //移出鼠标隐藏个人中心下拉区块
  10. });
  11. $('#login .close').on_click(function () {
  12. $('#login').yin_cang();
  13. $('#suo_ping').yin_cang();
  14. });
  15. $('#tou .deng_lu').on_click(function () { //获取登录,添加点击事件
  16. $('#login').xian_shi().yuan_su_ju_zhong().chuang_kou_shi_jian(function () { //点击后,显示登录框,登录框居中,添加窗口事件
  17. $('#login').yuan_su_ju_zhong(); //窗口改变时再次执行登录框居中
  18. $('#suo_ping').zhe_zhao_suo_ping()
  19. });
  20. $('#suo_ping').xian_shi().zhe_zhao_suo_ping();
  21. });
  22. $('#login').tuo_zhuai('tbu');
  23.  
  24. $('#jkf p #q').c_css('font-size','80px').c_css('color','#ff583d');
  25.  
  26. });

第一百三十九节,JavaScript,封装库--CSS选择器的更多相关文章

  1. 第一百五十九节,封装库--JavaScript,表单序列化结合ajax提交数据

    封装库--JavaScript,表单序列化结合ajax提交数据 封装库,表单序列化方法 /** xu_lie_biao_dan()方法,表单序列化方法,将自动获取指定表单里面的各项字段name值和va ...

  2. 第一百五十五节,封装库--JavaScript,轮播器

    封装库--JavaScript,轮播器 html <div id="banner"> <img src="img/banner1.jpg" a ...

  3. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...

  4. 第一百五十六节,封装库--JavaScript,延迟加载

    封装库--JavaScript,延迟加载 延迟加载的好处,就是在浏览器视窗外的图片,不加载,拖动鼠标到浏览器视窗内后加载,用户不看的图片就不用加载,可以减少服务器大量流量 将图片的src地址用一张统一 ...

  5. 第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式

    第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式 我们自定义一个main.py来作为启动文件 main.py #!/usr/bin/en ...

  6. 第一百三十六节,JavaScript,封装库--事件绑定

    JavaScript,封装库--事件绑定 在函数库添加两个函数 添加事件绑定函数 删除事件绑定函数 添加事件绑定函数 /** addEvent()函数库函数,跨浏览器添加事件绑定,注意:传入事件名称时 ...

  7. 第一百三十五节,JavaScript,封装库--拖拽

    JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...

  8. 第一百三十四节,JavaScript,封装库--遮罩锁屏

    JavaScript,封装库--遮罩锁屏 封装库新增1个方法 /** zhe_zhao_suo_ping()方法,将一个区块元素设置成遮罩锁屏区块 * 注意:一般需要在css文件将元素设置成隐藏 ** ...

  9. 第一百二十九节,JavaScript,理解JavaScript库

    JavaScript,理解JavaScript库 学习要点: 1.项目介绍 2.理解JavaScript库 3.创建基础库 从本章,我们来用之前的基础知识来写一个项目,用以巩固之前所学.那么,每个项目 ...

随机推荐

  1. STL_算法_区间的比較(equal、mismatch、 lexicographical_compare)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 equal(b,e,b2)       //用来比較第一个容器[b,e)和第二个容器b2开头,是否相等 e ...

  2. linux-文件系统基本概念

    linux中全部数据都是用文件存储,存放在文件夹中,文件夹呈树状结构. (一)文件类型 1.普通文件 包含文本文件.源码文件及可运行文件等.linux中不区分文本和二进制文件. 2.文件夹 类似win ...

  3. swift 常用第三方库

    1.Network: Alamofire:著名的AFNetworking网络基础库Swift版  -https://github.com/Alamofire/Alamofire SwiftyJSON: ...

  4. python 带颜色样式打印到终端

    #!/usr/bin/python # -*- coding: utf-8 -*- """ Created on Tue Aug 8 17:01:54 2017 @aut ...

  5. Unity3D研究院之DontDestroyOnLoad的坑

    http://www.xuanyusong.com/archives/2938 Unity中的一个方法DontDestroyOnLoad可以让某些游戏对象在切换场景的时候不是施放,听起来是一个非常好的 ...

  6. Nunit2.5.10快速上手(笔记)

    1.下载Nunit:http://www.nunit.org/index.php?p=download,下载MSI格式的安装包: 2.安装Nunit,根据提示安装即可,没有什么需要配置的,直接下一步就 ...

  7. 反射机制2,Class类的使用

    class是反射源头,不光可以取得对象所在类信息,也可直接通过class类的方法进行对象的实例化操作. 使用关键字new为对象实例化.如果已经实例化好了class对象,就可以通过class类中提供的n ...

  8. Hibernate 多对一关联查询

     版权声明:本文为博主原创文章,如需转载请标注转载地址.  博客地址:http://www.cnblogs.com/caoyc/p/5598269.html  一.单向多对一和双向多对一的区别 如果只 ...

  9. resin设置jvm参数

    http://www.quiee.com.cn/archives/592/ resin resin3.0 及前期版本内存设置, 如下: 启动时设置虚拟内存: unix> bin/httpd.sh ...

  10. 【HTML+CSS】(2)CSS Sprite雪碧图

    1. 雪碧图的使用场景 (1). 静态图片.不随用户信息的变化而变化 (2). 小图片.图片容量比較小 (3). 载入量比較大 一些大图不建议拼成雪碧图,比如淘宝站点的导航图片都是使用的雪碧图. 2. ...