您的位置:

首页 >

网页技巧 >

JS实现标签页切换效果 >

JS实现标签页切换效果

2016-06-05 12:43:25

分类:网页技巧

本文实例为大家分享了JS标签页切换的具体代码,供大家参考,具体内容如下<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>resize</title><style type="text/css">*{margin:0;padding:0;} #wrap{width:500px; margin:10px auto; } #tag{ width:498px; overflow:hidden; background:#000; border:1px solid #000; } #tag li{list-style:none; float:left; margin-right:0px; color:white; padding:5px 20px; cursor: pointer;} #tag .current{ color:#000; background:#ccc; } #tagContent div{ width:498px; border:1px solid #000; border-top:none; height:300px; display:none; }</style></head><body><div id="warp"> <ul id="tag"> <li>标签一</li> <li>标签二</li> <li>标签三</li> <li>标签4</li> <li>标签5</li> </ul> <div id="tagContent"> <div class="J_tabClass"> 内容一<br>内容一 </div> <div class="J_tabClass"> 内容二<br>内容二 </div> <div class="J_tabClass"> 内容三<br>内容三 </div> <div class="J_tabClass"> 内容4<br>内容4 </div> <div class="J_tabClass"> 内容4<br>内容5555555555555555 </div> </div></div><script type="text/javascript">//nameSpacevar VVG = {};VVG.DOM = {};//创建getElementsByClassName方法VVG.DOM.getElementsByClassName = function(str,parent,tag){ //父节点存在if(parent){ // 当父节点为string类型时,查找DOM节点,否则直接引用parent parent = typeof parent == "string" ? document.getElementById(parent):parent; // parent为空时提示错误信息if(!parent) alert("找不到标签,请检查参数是否正确"); }else{ // 未传值时,父节点为body parent = document.body; } // tagContent为节点类型,未传值时为all节点 tag = tag || "*"; // 在父节点查找子节点,建立空数组arrvar els = parent.getElementsByTagName(tag),arr=[]; for(var i=0,n=els.length;i<n;i++){ // 查找每个节点下的classname,以空格分离为一个k数组for(var j=0,k=els[i].className.split(" "),l=k.length;j<1;j++){ // 当K数组中有一个值与str值相等时,记住这个标签并推入arr数组if(k[j]==str){ arr.push(els[i]); break; } } } // 返回数组return arr;}//创建TabManager对象VVG.TabManager = function(oo){ this.root = oo.root || "warp"; this.tabUlId = oo.tabUlId||"tabUlId"; this.tabConId = oo.tabConId||"tabConId"; this.tabConClass = oo.tabConClass||"J_tabClass"; this.trggle = oo.trggle || "click"; this.currentCss = oo.currentCss || "current"; }VVG.TabManager.prototype = { tabChange:function(){ // 获取UL的idvar ulid = document.getElementById(this.tabUlId); // 获取UL下的LI元素var ulli = ulid.getElementsByTagName("li"); // 获取内容盒子DIV元素var tabConId = document.getElementById(this.tabConId); // 获取root下的div的class为特定值的对象数组var tabConClasses = VVG.DOM.getElementsByClassName(this.tabConClass,this.root,"div"); // 初始化 ulli[0].className = this.currentCss; tabConClasses[0].style.display = 'block'; for (var i = ulli.length - 1; i >= 0; i--) { // 赋值this 与 that,避免this混乱var that = this; // 设置对象index属性 ulli[i].index = i; // 设置对象的事件 ulli[i]["on" + this.trggle] = function(){ for(var j = tabConClasses.length - 1; j >= 0; j--){ tabConClasses[j].style.display = "none"; ulli[j].className = ""; } tabConClasses[this.index].style.display = "block"; this.className = that.currentCss; } } } }// 新建对象实例var TabManager1 = new VVG.TabManager( { root:"warp",//包裹tab对象的div层的ID名称,必填 tabUlId:"tag",//TAB标签LI元素的父亲UL元素的ID名称,必填 tabConId:"tagContent",//内容元素的包裹盒子的ID名称,必填 trggle:"mouseover",//切换方式,默认为click,可选 currentCss:"current",//TAB标签liy元素的当前CSS名称,默认为current tabConClass:"J_tabClass",//内容元素的CLASS名称,默认为J_tabClass });// 调用对象方法TabManager1.tabChange();</script></body></html>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文实例讲述了ES6新特性之字符串的扩展。分享给大家供大家参考,具体如下:一、ES5字符串函数concat: 将两个或多个字符的文本组合起来,返回一个新的字符串。indexOf: 返回字符串中一个子串第一处出现的索引(从左到右搜索)。如果没有匹配项,返回 -1 。charAt: 返回指定位置的字符。lastIndexOf: 返回字符串中一个子串最后一处出现的索引(从右到左搜索),如果没有匹配项,返回 -1 。match: 检查一个字符串匹配一个正则表达式内容,如果么有匹配返回 null。substring: 返回字符串的一个子串,传入参数是起始位置和结束位置。substr: 返回字符串的一个子串,传入参数是起始位置和长度replace: 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。search: 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。slice: 提取字符串的一部分,并返回一个新字符串(与 substring 相同)。split: 通过将字符串划分成子串,将一个字符串做成一个字符串数组。length: 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。toLowerCase: 将整个字符串转成小写字母。toUpperCase: 将整个字符串转成大写字母。二、ES6新增常用函数传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。includes():返回布尔值,表示是否找到了参数字符串。startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。var s = 'Hello world!';s.startsWith('Hello') // trues.endsWith('!') // trues.includes('o') // truerepeat(): 返回一个新字符串,表示将原字符串重复n次。'x'.repeat(3) // "xxx"'hello'.repeat(2) // "hellohello"'na'.repeat(0) // ""'na'.repeat(2.9) // "nana"'na'.repeat(Infinity)// RangeError'na'.repeat(-1)// RangeError'na'.repeat(-0.9) // ""参数如果是小数,会被取整(向下取整)。参数是负数或者Infinity,会报错。参数是0到-1之间的小数,则等同于0,这是因为会先进行取整运算。0到-1之间的小数,取整以后等于-0,repeat视同为0。参数NaN等同于0。ES7推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart用于头部补全,padEnd用于尾部补全。padStart和padEnd一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。'x'.padStart(5, 'ab') // 'ababx''x'.padStart(4, 'ab') // 'abax''x'.padEnd(5, 'ab') // 'xabab''x'.padEnd(4, 'ab') // 'xaba'如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。如果省略第二个参数,则会用空格补全长度。三、模板字符串1. 多行字符串传统的JavaScript语言,输出模板通常是这样写的。$('#result').append( 'There are <b>' + basket.count + '</b> ' + 'items in your basket, ' + '<em>' + basket.onSale + '</em> are on sale!');上面这种写法相当繁琐不方便,ES6引入了模板字符串解决这个问题。$('#result').append(` There are <b>${basket.count}</b> items in your basket, <em>${basket.onSale}</em> are on sale!`);模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。2.嵌入变量模板字符串中嵌入变量,需要将变量名写在${}之中。// 字符串中嵌入变量var name = "Bob", time = "today";`Hello ${name}, how are you ${time}?`3.调用函数模板字符串之中还能调用函数。function fn() { return "Hello World";}`foo ${fn()} bar`// foo Hello World bar如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。如果模板字符串中的变量没有声明,将报错。如果大括号内部是一个字符串,将会原样输出。`Hello ${'World'}`// "Hello World"希望本文所述对大家ECMAScript程序设计有所帮助。

本文实例讲述了JavaScript队列的应用。分享给大家供大家参考,具体如下:和前面介绍的栈相反,队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端进行删除。JavaScript自己提供了两个队列方法shift和push方法,分别是出队和入队,其原理就是将元素插入数组最后一个和删除第一个元素。这里需要注意一点,就是unshift方法的效率比push的效率要低很多。因为它要将入队之前的数组全部往前移动一位。这里我们就不用代码再次演示了。和线性表类似,队列也分为顺序队列和链队列。和顺序栈类似,在队列的顺序存储结构中,除了使用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,还要设置两个指针front和rear分别指向队列头元素和队列尾元素。初始化时,front=rear=0;插入元素时,rear+1;删除元素时,front+1。所以在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。队列的应用有哪些呢?我们先看看计算机组成层面的吧,首先就是CPU资源的竞争问题。在具有多个终端的计算机系统中,有多个用户需要使用CPU来各自运行程序,操作系统会按照每个请求在时间上的顺序,加请求排成一个队列。每次把CPU分配给队头的任务,完成后使其出队,然后依次。第二个例子就是主机与外部设备之间速度不匹配的问题。我们以打印机和主机为例。主机输出数据给打印机打印,主机输出数据的速度远大于打印机打印速度,所以有一个打印数据缓冲区,主要把数据依次写入缓冲区,写满后主机就暂停输出,继而去做其他时间,只到打印机完成打印,再次请求主机发送数据,主机才继续输出数据。这样利用队列可以提高主机的效率。我在这里挑一个常见的软件层面的例子,也就是银行排队问题。先说说实现思路,第一个客户到达的时刻为0,之后每个客户到达的时刻在前一个客户到达时设定随机值,因此在客户到达时需要产生两个随机数,一个是客户办理业务耗时durtime,一个是下一客户到达时间间隔intertime,假设当前时间为occurtime,则下一客户到达时为occurtime+intertime。刚到达的客户应该插入到当前含元素最少的队列中。在JavaScript的运用中,通常使用队列来进行任务的排序。而任务队列的任务是按进入队列的顺序延迟执行(解决状态一致性)的,即当前一个任务完成后,后面的任务才被执行,如果当前没有任务,则入队列的任务立即执行。代码如下:<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>队列</title> </head> <body><script type="text/javascript"> function taskQueue() { taskList = []; var isRun = false; this.addTask = function (task) { taskList.push(task); }; setInterval(function () { if (taskList.length > 0 && !isRun) { isRun = true; taskList.shift(); isRun = false; } }, 100); } function show(){ alert(taskList); } taskQueue(); addTask(1); addTask(2); addTask(3); setTimeout('show()',99);//1,2,3 setTimeout('show()',101);//2,3 setTimeout('show()',400);//null</script> </body></html>更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》希望本文所述对大家JavaScript程序设计有所帮助。

一、javascript的解析顺序我们大家所理解的代码的执行顺序都是从上到下的,但是实际上确不是这样的。我们看一下下面的代码。alert(a);var a = 1;如果执行顺序是从上到下的,在上面弹出一个a,浏览器会认为从上到下执行的,那么当它alert(a)的时候,他就会发现没有这个东西,那么他就会报错,但是实际上他弹出来的结果是undefined。返回值是undefined说明a没有被定义也就是没有赋值。下面我来讲解一下javascript的解析顺序。1.ES5中有声明意义的关键字var 会存在变量提升function也有声明变量的的作用。2.解析顺序1.找声明 var、function 声明:只是声明变量,而不包括赋值。2. 执行注意:以上两步 都遵循从上至下,执行的时候遇到等号,先看等号的右边。注意:当function声明的变量和var声明的变量重名时,function的变量权重会比var声明的要高。下面多来几个例子解析一下就清楚许多了,但是看例子之前要知道一下什么叫作用域。二、作用域作用域就是:起作用的范围分为下面两种1.全局作用域2.函数作用域他们两个的区别看下面的例子仔细分析。三、看几个例子解析一下执行顺序的步骤1. 第一个例子:var x = 5; a(); function a(){ alert(x); var x = 10; }alert(x);解析过程1,.寻找声明 (看全局作用域)var x;function a(){}2.执行x = 5;a() ------------->执行到这个函数的过程中在重新进行以上两步1,寻找声明 var x;(函数作用域)2. 执行alert(x); 这个x在函数作用域中存在,并且还没有执行到赋值的那一步,那么弹出的东西就是undefined;x = 10;alert(x) 这里弹窗是全局变量 5;所以浏览器弹窗的内容是 undefined 52. 第二个例子 a() function a(){ alert(x); var x = 10; }alert(x);解析过程 按照上面的例子一样分析1. 寻找声明 function a(){}2.执行 a()------------------------->函数1.寻找声明var x;2.执行alert(x) 弹出未定义x = 10;alert(x); 这里的x会从全局中寻找x,但是发现并没有x,所 以浏览器会 报错 x is not defined x没有被定义所以浏览器的弹出的内容是 undefined 报错 我相信看了这两个例子的人都对这个解析过程都有了清除的了解,如果还是不太了解,建议重新看一次。下面介绍几个需要注意的地方, 直接上例子3. 第三个例子前面讲到了当function声明的变量和var声明的变量重名时,function的变量权重会比var声明的要高。来一个例子证明一下alert(a)function a() { alert("函数")}var a = 1; alert(a)解析过程1.寻找声明 function a(){} var a;2. 执行alert(a) 前面说到了function的声明比var声明的权重高,所有执行这个的时候他会弹出这个 函数块(函数体)a = 1;alert(a); 这里弹出的就是 1 了所以最后的结果就是 函数块 1;4.第四个例子子作用域可以向父级作用域找变量,直到全局作用域为止,反之不行。 如果子作用域有同样的变量,那么他就会使用自己的,不会去找爸爸要。var a = 5;function fn() { alert(a)}fn()解析过程1.寻找声明var a;function fn(){}2.执行a = 5;fn()--------------------------------------> 函数1.找声明2.执行alert(a); 他这里没有a 所以去找爸爸要。 a = 5; 所以弹窗是 5所以最后结果为 弹窗5下面看一下爸爸会不会去找儿子要东西function fn(){ var b = 5; return b; }fn();alert(b);1.寻找声明function fn(){}2. 执行fn()----------------------------------------> 函数1.寻找声明1.var b;2.执行return b;alert(b); //我们看一下返回值是多少 b is not defined 他说b没有被定义,说明父作用域不可以向自作用域去寻找变量。5. 第五个例子当一个变量无中生有时,不管从哪个作用域出来的,统统归到window下,下面看两个例子fn(); alert(a); var a = 0; alert(a); function fn(){ var a = 1; }这一个例子应该可以自己分析了 最后的结果是 undefined 0我们再来看一下下面这个你会很吃惊 fn() alert(a) var a = 0; alert(a); function fn(){ a = 1; } 明明都一样,我吃惊什么 返回值不是还是 undefined 和 0 吗但是你有没有发现倒数第二行 上面的声明了 下面的没有声明,来解析一波1.寻找变量var a;function fn(){}2.fn()---------------------------->函数a = 1; 这个时候就说到了那一点,无中生有的变量,统统归到window下面所以下面的执行过程alert(a) 这里的弹窗就是 1 了a = 0; alert(a) 弹出 0所以最后的结果是 1 0四、严格模式严格模式下的代码执行时,非常严格变量不允许无中生有意义:规范代码开发的流畅,逻辑"use strict"a = 1;alert(a);当我们写后面两句代码的时候不会报错和出现问题,但是当我们加上第一句代码的时候,我们在这样写的时候就会报错了。所以我们还是按照规范的标准来,提高自己的能力五、可能好多人做了上面的例子感觉不太过瘾,下面我再给出几个例子,可以自己去分析分析,我会在最后面给出答案。1. 第一个例子  // 10 报错var a = 10;alert(a);a()function a(){ alert(20);}2.第二个例子 undefined 1 0var a = 0; function fn(){ alert(a); var a = 1; alert(a); } fn(); alert(a);3.第三个例子 当同样的声明同样的名字重复时,后面写的会覆盖前面写的 //2 1 1 3a() var a = function(){ alert(1) } a(); function a(){ alert(2); } a(); var a = function(){ alert(3); } a()如果你看到我的文章可以收获一些知识,那么我会非常高兴的。以上这篇浅谈js的解析顺序 作用域 严格模式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。$(function () { $(".dropdown").mouseover(function () { $(this).addClass("open"); }); $(".dropdown").mouseleave(function(){ $(this).removeClass("open"); })})总结以上所述是小编给大家介绍的Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

焦点访谈

最新最热的文章

更多 >

COPYRIGHT (©) 2017 Copyright ©2017 5060网址大全 网站地图

联系我们

827570882

扫描二维码分享到微信