首页 文章 精选 留言 我的

精选列表

搜索[互动课堂],共7842篇文章
优秀的个人博客,低调大师

#2020征文-TV# HarmonyOS应用开发项目实战--在线课堂TV(二)

目录: 首页动态效果图展示 组件介绍 动手开发--新建模块(Module) 动手开发--技术栈分析 动手开发--代码编写--添加tabs容器 动手开发--代码编写--修改焦点和tab的默认索引 本章小结 首页模块开发之一 首页动态效果图展示 效果图分解 知识点讲解: 布局说明: JS UI框架中智慧屏以720px(px指逻辑像素,非物理像素)为基准宽度,根据实际屏幕宽度进行缩放,例如当width设为100px时,在宽度为1440物理像素的屏幕上,实际显示的宽度为200物理像素。智能穿戴的基准宽度为454px,换算逻辑同理。 一个页面的基本元素包含标题区域、文本区域、图片区域等,每个基本元素内还可以包含多个子元素,开发者根据需求还可以添加按钮、开关、进度条等组件。在构建页面布局时,需要对每个基本元素思考以下几个问题: 该元素的尺寸和排列位置 是否有重叠的元素 是否需要设置对齐、内间距或者边界 是否包含子元素及其排列位置 是否需要容器组件及其类型 将页面中的元素分解之后再对每个基本元素按顺序实现,可以减少多层嵌套造成的视觉混乱和逻辑混乱,提高代码的可读性,方便对页面做后续的调整。 组件介绍: 组件(Component)是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。开发者还可以通过组件间合理的搭配定义满足业务需求的新组件,减少开发量,自定义组件的开发方法详见后面的自定义组件。 组件分类 根据组件的功能,可以将组件分为以下四大类: 动手开发--新建模块(Module): 注意:我这里省去了HelloWorld工程的创建,如果不会HelloWorld的请自行查看官网工具使用介绍。为了更好的循序渐进演示项目的迭代成型,我这里用一个Module为一个demo代码进行编写,下一个demo的Module会在前一个的基础上进行开发,直到最后项目成型。 如果您已经创建好了一个TV 版JS UI开发的HelloWorld工程,请参照下面的步骤创建一个Module 给自己模块取个名字,注意名字首个字符为字母,并且不要包含特殊字符,我这里取名为IcollegeTVDemo1,创新好之后的工程结构如下图 项目创建完成之后,推荐大家使用git进行托管起来哦! 动手开发--技术栈分析: 我们已经把布局做好了切割,并且对鸿蒙系统JS UI开发做了简单介绍,下面我们来选取合适的容器和组件进行开发。 首先整个页面时放置在一个根容器div里面,该div采用垂直方向至上而下布局,页面里面的顶部采用div容器水平居右排列,该div内部放置一个搜索框和一张用户图片。然后该div下面放置一个tabs容器,能够通过点击tab切换子页面,并且滑动子页面能够切换tab标签。 思考: 1、div容器如何使用?如何横向排列和纵向排列,如何设置居中、居左、居右,如何设置宽度和高度,如何设置留白空间。 2、tabs容器如何使用,如何添加tabs标签,如何添加子页面,如何让tab标签变化跟随子页面变化? 解决思路:查找鸿蒙官方API手册 div容器api介绍地址:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-container-div-0000000000611484 tabs容器api介绍地址:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-container-tabs-0000000000611572 作为一个开发者,最好的方式就是多阅读官方API,我也是通读了好几遍之后才开始着手这个项目开发的 动手开发--代码编写--添加顶部布局: 编写Module下的index.hml代码: <div class="container"> <div class="top"> <search class="search" focusable="false"></search> <image src="common/image/user.png" class="user" ></image> </div> </div> 重点讲解: 注意该文件后缀是hml,并不是html。它里面的组件是由鸿蒙底层使用c语言编写封装而成的,并不是html中的标签,所以一定不要想着把html里的标签在这里面写,比如<ul>和<li>标签,在hml里面就没有这个组件,具体能使用哪些组件请以鸿蒙官方api手册为准。 <div>是容器组件,一般用来承载组件。 <image>是图片组件,用来添加图片,src指定图片路径,这里指定的本地路径,需要先在common目录下创建image文件夹,并且放置相应图片。 <search>是搜索组件。 编写index.css代码: .container { flex-direction: column; padding-left: 10px; align-items:flex-start; } .top { flex-direction: row; height: 36px; justify-content:flex-end; align-items: center; } .user { height:32px; width: 32px; margin-right: 20px; } .search{ width: 200px; height:32px; padding: 5px; } 重点讲解: JS UI布局方式默认采用的是flex布局,这个布局与web开发中的css3里面的flex基本一致,只是有个别属性在鸿蒙中不存在,具体属性以鸿蒙官网手册为准。 flex-direction是主轴排列方向及内部组件排列方向,column是竖直方向排列,row是水平方向排列。详细了解请看另一篇flex布局详解以及官方api介绍。 align-items是定义子组件如何在交叉轴上对齐 justify-content:定义了子组件如何在主轴上对齐 此时我们来查看下运行效果 当写好代码之后,我们可以在模拟器中运行查看效果,根据效果再来修改代码,注意模拟器是没有像浏览器F12那种直接调试标签和css样式的功能的。 小技巧:如果想调整css细节,可以给组件加上不同颜色的border边框,来观察细节 查看更多章节>>> 作者:软通夏德旺 想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

优秀的个人博客,低调大师

杨老师课堂之Jquery的筛选,事件,效果,Ajax,javascript跨域)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/81940686 1 筛选[掌握]  筛选与之前“选择器”雷同,筛选提供函数 1.1 过滤 eq(index|-index),获取第N个元素 •index:一个整数,指示元素基于0的位置,这个元素的位置是从0算起。 •-index:一个整数,指示元素的位置,从集合中的最后一个元素开始倒数。(1算起) first(),获取第一个元素 last(),获取最后个元素 hasClass(class),检查当前的元素是否含有某个特定的类,如果有,则返回true。 filter(expr|obj|ele|fn),筛选出与指定表达式匹配的元素集合。 返回值:Booleanis(expr|obj|ele|fn),根据选择器、DOM元素或 jQuery 对象来检测匹配元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true。 map(callback),将一组元素转换成其他数组(不论是否是元素数组) has(expr|ele),保留包含特定后代的元素,去掉那些不含有指定后代的元素。 not(expr|ele|fn),删除与指定表达式匹配的元素 slice(start, [end])选取指定范围匹配的子集 •start 开始选取子集的位置。第一个元素是0.如果是负数,则可以从集合的尾部开始选起。 •end 结束选取自己的位置,如果不指定,则就是本身的结尾 1.2 查找 children([expr]),取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合。 •注意:考虑子元素而不考虑所有后代元素。 find(expr|obj|ele),搜索所有与指定表达式匹配的元素 next([expr]),取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合。 nextAll([expr]),查找当前元素之后所有的同辈元素。 nextUntil([exp|ele][,fil]),查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止。 offsetParent(),返回第一个匹配元素用于定位的父节点。 •这返回父元素中第一个其position设为relative或者absolute的元素。此方法仅对可见元素有效。 parent([expr]),取得一个包含着所有匹配元素的唯一父元素的元素集合 parents([expr]),取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。 map(callback),将一组元素转换成其他数组(不论是否是元素数组) has(expr|ele),保留包含特定后代的元素,去掉那些不含有指定后代的元素。 not(expr|ele|fn),删除与指定表达式匹配的元素 slice(start, [end])选取指定范围匹配的子集 •start 开始选取子集的位置。第一个元素是0.如果是负数,则可以从集合的尾部开始选起。 •end 结束选取自己的位置,如果不指定,则就是本身的结尾。 prev([expr]),取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。 prevAll([expr]),查找当前元素之前所有的同辈元素 prevUntil([exp|ele][,fil]),查找当前元素之前所有的同辈元素,直到遇到匹配的那个元素为止。 siblings([expr]),取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合 <A> <B> <C></C> <D></D> <E></E> <F></F> </B> </A> B.children() 获得所有子元素(CDEF) A.find(D) 从A子元素中查询D D.parent() 获得D的父元素(B) C.next() 下一个兄弟(D) C.nextAll() 后面的所有兄弟(DEF) E.prev() 上一个兄弟(D) –> previous() E.prevAll() 前面的所有(CD) E.siblings() 所有兄弟(CDF) 了解 C.nextUntil(E) C最后的所有兄弟,直到指定元素截止(DE) F.prevUntil(D) (DE) D.parents() 获得D所有父元素(B、A) D.closest()获得D所有父元素,含自己(D、B、A)与 D.parents() 对比 closest和parents的主要区别是: 1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找; 2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤; 3,前者返回0或1个元素,后者可能包含0个,1个,或者多个元素。 1.3 串联 add(expr|ele|html|obj[,con]),把与表达式匹配的元素添加到jQuery对象中 A.add(B) 将A和B拼凑在一起,等效 $(A,B) andSelf(),加入先前所选的加入当前元素中 A.children().andSelf() 所有孩子,再添加自己 contents(),查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容 contents() 获得所有节点(子元素、文本) abc xxx end() 回到最近的一个”破坏性”操作之前 end() 回到最近的一个”破坏性”操作之前 A.children().end()… end将返回开始A位置 2 事件 2.1 常见事件 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> #e02{ border: 1px solid #000000; height: 200px; width: 200px; } </style> <script type="text/javascript" src="../js/jquery-1.8.3.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#e01").blur(function(){ $("#textMsg").html("文本框失去焦点:blur"); }).focus(function(){ $("#textMsg").html("文本框获得焦点:focus"); }).keydown(function(){ $("#textMsg").append("键盘按下:keydown"); }).keypress(function(){ $("#textMsg").append("键盘按住:keypress"); }).keyup(function(){ $("#textMsg").append("键盘弹起:keyup"); }).select(function(event){ //支持谷歌 var sub = $(this).val().substring(event.target.selectionStart,event.target.selectionEnd); $("#textMsg").html("文本内容被选中:select , " + sub); }); var i = 0; $("#e02").mouseover(function(){ $("#divMsg").html("鼠标移上:mouseover"); }).mousemove(function(){ $("#divMsg").html("鼠标移动:mousemove , " + i++ ); }).mouseout(function(){ $("#divMsg").html("鼠标移出:mouseout"); }).mousedown(function(){ $("#divMsg").html("鼠标按下:mousedown"); }).mouseup(function(){ $("#divMsg").html("鼠标弹起:mouseup"); }); $("#e03").click(function(){ $("#buttonMsg").html("单击:click"); }).dblclick(function(){ $("#buttonMsg").html("双击:dblclick"); }); }); </script> </head> <body> <input id="e01" type="text" /><span id="textMsg"></span> <br/> <hr/> <div id="e02" ></div><span id="divMsg"></span> <br/> <hr/> <input id="e03" type="button" value="可以点击"/><span id="buttonMsg"></span> <br/> </body> </html> focus和 focusin 对比 focus获得焦点 foucsin获得焦点。可以在父元素上检测子元素获取焦点的情况。 blur和 focusout 失去焦点[同理] mouseover和 mouseenter 移进 mouseover, 如果鼠标指针穿过任何子元素,同样会触发 mouseover 事件 mouseout和 mouseleave 移出[同理] 2.2 页面载入【掌握】 方式1: $(document).ready(function(){ // $ == jQuery .... }); 变种 jQuery(document).ready(function(){ // $ == jQuery .... }); 方式2:简化版 $(function(){ ..... }); ready函数可以使用多次。而window.onload只能一次 2.3 事件处理和委派【掌握】 on(events,[selector],[data],fn),在选择元素上绑定一个或多个事件的事件处理函数。 off(events,[selector],[fn]),在选择元素上移除一个或多个事件的事件处理函数。 bind(type,[data],fn)为每个匹配元素的特定事件绑定事件处理函数。 unbind(type,[data|fn]]),bind()的反向操作,从每一个匹配的元素中删除绑定的事件。 one(type,[data],fn),为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。 one 绑定一次事件  绑定和解绑 在文档装载完成以后,如果打算为元素绑定事件来处理完成某些操作,则可以使用 bind()方法来对匹配元素进行特定的事件绑定,bind()方法的调用格式如下: bind(type,[,data],fn); 第1个参数是事件类型,.当然也可以是自定义名称 第2个参数是可选参数,作为event.data属性值传递给事件对象的额外的数据对象 第3个参数则是用来绑定的处理函数 bind 绑定事件,一直使用,直到解绑。 例如:$username.bind("click",function(){}) --> $username.click(function(){}); unbind 解绑事件 绑定是可以指定别名 ,格式: 事件.别名 bind("click.xxx",fn) unbind("click.xxx")  触发(了解) trigger(type,[data]),在每一个匹配的元素上触发某类事件。 triggerHandler(type, [data]),这个特别的方法将会触发指定的事件类型上所有绑定的处理函数。但不会执行浏览器默认动作,也不会产生事件冒泡。 trigger()触发所有的事件(包括浏览器默认的) triggerHandler()触发所有的事件(不包括浏览器默认的) 事件冒泡 1.什么是冒泡 案例介绍 之所以称之为冒泡,是因为事件会按照DOM的层次结构像水泡一样不断向 上直至顶部. 2.事件冒泡引发的问题. 事件冒泡可能会引起预料之外的效果,上例中,本来只想触发元素 的click事件,然而 元素和元素的click事件也同时被触 发了.因此有必要对事件的作用范围进行限制.当单击元素时,只 触发元素的click事件,而不触发 和元素上的 click事件.当单击 元素时,只触发 元素上的click事件, 而不触发元素上的click事件. 为了尽快解决这些问题,我们我们先介绍以下内容: 。 事件对象: 由于IE-DOM和标准DOM实现事件对象的方法各不相同,导致在不同 浏览器中获取事件对象变得比较困难.针对这个问题,jquery进行了必要的扩 展和封装,从而使得在任何浏览器中能很好的轻松的访问获取事件对象以及事 件对象的一些属性在程序中使用事件对象非常简单,只需要为函数添加一个参 数. //event:事件对象 $(“element”).bind(“click”,function(event){ //coding… }) 这样,当单击”element”时,事件对象就被创建了,这个事件对象只有事件处理函数才能访问到.事件处理函数在执行完毕后,事件对象就会被销毁. 停止事件冒泡 停止时间冒泡可以阻止事件中其他对象的事件处理函数被执行.在jquery中提供了stopPropagation()方法来阻止冒泡事件. $(“span”).bind(“click”,function(){ vartxt=$("#msg").html();+"<p>内是span元素被单击</p>"; $(“#msg”).html(txt); event.stopPropagation();//停止冒泡事件 }) 当单击span元素时,只会触发span元素上的click事件,而不会触发 div元素和body元素的click事件. 可以用同样的方法解决 元素上的问题 阻止默认行为 网页中的元素都有自己默认的行为,例如:单击超链接后悔跳转,单击”提交”按钮会表单会提交,有时需要阻止元素的默认行为 在jquery中,提供了preventDefault()方法来阻止元素的默认行为. 举一个例子,在项目中,经常需要验证表单,在单击”提交”按钮是,验证表单内容,例如元素是否是必填字段,某元素长度是否够6位,单表单不符合提交条件时,要阻止表单的提交 eg: $(“#sub”).bind(“click”,function(event){ var username = $("#username").val(); //获取元素的值 if(username==""){ //判断值是否为空 $("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息 event.preventDefault(); //阻止默认行为 ( 表单提交 ) } }) 事件对象的属性 (1) event.type()方法 该方法的作用是可以 获取到事件的类型 $(“a”).click(function(event){ alert(event.type); //获取事件类型 return false; //阻止链接被跳转 }) 以上代码会返回”click” (2)event.preventDefault()方法 阻止默认事件行为.js中符合W3C规范的preventDefault()方法在IE浏览器中无效. jquery对其进行了封装,使之能兼容各大浏览器 (3)event.stopPropagation()方法 阻止事件的冒泡.js真符合W3C规范的stopPropagation()方法在IE浏览器中无效.jquery 对其进行了封装,使之能兼容各大浏览器 (4) event.target()方法 event.target()方法的作用是获取到触发事件的元素.jquery对其封装后,避免了 W3C,IE和 Safari浏览器不同标准的差异 $(“a[href=’http://www.google.com‘]”).click(function(event){ alert(event.target.href); //获取触发事件的a元素的href属性值 return false;//阻止链接跳转 });//output “http://google.com” (5)event.relateTarget()方法. 在标准DOM中,mouseover和mouseout所发生的元素可以通过event.target()方法 来访问.相关元素是通过event.relateTarget()方法来访问的.event.relatedTarget() 方法是在mouseover中相当于 IE浏览器的event.fromElement()方法,在mouse 中相当于IE浏览器的event.toElement方法. jquery对其进行了封装,使之能兼容各大浏览器 (6)event.pageX和event.pageY. 该方法的作用是获取到光标相对于页面的x坐标和y坐标.如果没有使用jquery时,那么IE浏览器中 是使用event.pageX()和event.pageY()方法.如果页面上有滚动条,则还要加上滚动条的宽度和高 度.在IE浏览器中还应该减去默认的2px的边框. $(“a”).click(function(){ //获取鼠标相对于当前页面的坐标 alert("Current mouse position:"+event.pageX+","+event.pageY); return false;//阻止链接跳转 }); (7)event.which()方法 该方法的作用是在鼠标单击事件中获取到鼠标左中右键,在键盘事件中获取键盘的按键. $(function(){ $(“body”).mousedown(function(e){ alert(e.which); //1==鼠标左键 left 2==鼠标中键 3=鼠标右键 });}); (8)event.originaIEvent()方法. 该方法的作用是指向原始的事件对象  委派 live(type, [data], fn),给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。 A标签添加事件,之后再追加a标签都具有相同的事件。 die(type, [fn]),从元素中删除先前用.live()绑定的所有事件 die解绑 2.4 事件切换【了解】 hover([over,]out) 当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数 toggle(fn,fn2,[fn3,fn4,…])用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件 hover 在mouseover和mouseout之间进行切换 toggle 点击事件切换,点击第一次执行 fn,点击第二次执行fn2….. <script type="text/javascript"> $(function(){ //1 点击事件切换 $("#e01").toggle(function(){ alert("第一次"); } ,function(){ alert("第二次"); }); //2. 鼠标移进出切换 /* $("#e02").hover(function(){ //over $("#divMsg").html("over"); },function(){ //out $("#divMsg").html("out"); }); */ $("#e02").mouseover(function(){ $("#divMsg").html("over"); }).mouseout(function(){ $("#divMsg").html("out"); }); }); </script> 案例 文字提示 <script src="../js/jquery-1.8.3.js" type="text/javascript"></script> <style type="text/css"> body{ margin:0; padding:40px; background:#fff; font:80% Arial, Helvetica, sans-serif; color:#555; line-height:180%; } p{ clear:both; margin:0; padding:.5em 0; } /* tooltip */ #tooltip{ position:absolute; border:1px solid #333; background:#f7f5d1; padding:1px; color:#333; display:none; } </style> <script type="text/javascript"> $(function(){ //将默认提示去掉,改成自定义提示 $(".tooltip").mouseover(function(event){ if($(this).attr("title")){ //1获得title并记录 $(this).data("title",$(this).attr("title")); //2 删除title提示 $(this).removeAttr("title"); } //3 显示自定义提示 var divObj = $("<div id='tooltip'>"+$(this).data("title")+"</div>"); $("body").append(divObj); //显示,确定显示位置 divObj.css({"left":event.pageX + 20 + "px" , "top" : event.pageY + 10 + "px"}).show(1000); }).mouseout(function(){ $("#tooltip").remove(); }).mousemove(function(){ $("#tooltip").css({"left":event.pageX + 20 + "px" , "top" : event.pageY + 10 + "px"}); }); }); </script> </head> <body> <p><a href="#" class="tooltip" title="这是我的超链接提示1.">提示1.</a></p> <p><a href="#" class="tooltip" title="这是我的超链接提示2.">提示2.</a></p> <p><a href="#" title="这是自带提示1.">自带提示1.</a></p> <p><a href="#" title="这是自带提示2.">自带提示2.</a> </p> </body> </html> 案例 图片放大提示 <style type="text/css"> body{ margin:0; padding:40px; background:#fff; font:80% Arial, Helvetica, sans-serif; color:#555; line-height:180%; } img{border:none;} ul,li{ margin:0; padding:0; } li{ list-style:none; float:left; display:inline; margin-right:10px; border:1px solid #AAAAAA; } /* tooltip */ #tooltip{ position:absolute; border:1px solid #ccc; background:#333; padding:2px; display:none; color:#fff; } </style> <script type="text/javascript"> $(function(){ var x = 10; var y = 20; var href; $("a[class=tooltip]").mouseover(function(e){ //1 获取对应标签的自带提示 //var title = $("a[class=tooltip]").attr("title"); //this代表的是DOM对象(页面中的元素) href = this.href; //删除自带提示 this.href = ""; //2 创建标签用于自定义提示 var $div = $("<div id='tooltip'><img src='"+href+"'></img></div>"); //3 将自定义提示的标签,添加到body标签下 $("body").append($div); //4 如何调整显示位置(相对鼠标的坐标值:e.pageX和e.pageY) $("#tooltip").css({ "top" : e.pageY + y + "px", "left" : e.pageX + x + "px" }).show(1000); }).mouseout(function(){ this.href = href; $("#tooltip").remove(); }).mousemove(function(e){ $("#tooltip").css({ "top" : e.pageY + y + "px", "left" : e.pageX + x + "px" }); }); }); </script> </head> <body> <h3>有效果:</h3> <ul> <li><a href="images/apple_1_bigger.jpg" class="tooltip" title="苹果 iPod"><img src="images/apple_1.jpg" alt="苹果 iPod" /></a></li> <li><a href="images/apple_2_bigger.jpg" class="tooltip" title="苹果 iPod nano"><img src="images/apple_2.jpg" alt="苹果 iPod nano"/></a></li> <li><a href="images/apple_3_bigger.jpg" class="tooltip" title="苹果 iPhone"><img src="images/apple_3.jpg" alt="苹果 iPhone"/></a></li> <li><a href="images/apple_4_bigger.jpg" class="tooltip" title="苹果 Mac"><img src="images/apple_4.jpg" alt="苹果 Mac"/></a></li> </ul> <br/><br/><br/><br/> <br/><br/><br/><br/> <h3>无效果:</h3> <ul> <li><a href="images/apple_1_bigger.jpg" title="苹果 iPod"><img src="images/apple_1.jpg" alt="苹果 iPod" /></a></li> <li><a href="images/apple_2_bigger.jpg" title="苹果 iPod nano"><img src="images/apple_2.jpg" alt="苹果 iPod nano"/></a></li> <li><a href="images/apple_3_bigger.jpg" title="苹果 iPhone"><img src="images/apple_3.jpg" alt="苹果 iPhone"/></a></li> <li><a href="images/apple_4_bigger.jpg" title="苹果 Mac"><img src="images/apple_4.jpg" alt="苹果 Mac"/></a></li> </ul> </body> </html> 3 效果【了解】 show([speed,[easing],[fn]]),显示隐藏的匹配元素。 •三种预定速度之一的字符串(“slow”,”normal”,or “fast”)或表示动画时长的毫秒数值 hide([speed,[easing],[fn]]),隐藏显示的元素 toggle([speed],[easing],[fn]) 如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。 •speed: 隐藏/显示效果的速度。默认是 “0”毫秒。可能的值:slow,normal,fast。” •easing:(Optional) 用来指定切换效果,默认是”swing”,可用参数”linear” •fn:在动画完成时执行的函数,每个元素执行一次  基本:改变高和宽 show(速度,fn) 显示 当显示成功后触发fn hide()隐藏 toggle(speed[,fn]) 切换,如果隐藏就显示,如果显示就隐藏。 —————————————- slideDown([speed],[easing],[fn]),通过高度变化(向下增大)来动态地显示所有匹配的元素 slideUp([speed,[easing],[fn]]),通过高度变化(向上减小)来动态地隐藏所有匹配的元素 slideToggle([speed],[easing],[fn]) 通过高度变化来切换所有匹配元素的可见性 •这个动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式隐藏或显示  滑动:改变高度 slideDown,显示(从上往下) slideUp,隐藏(从下往上) slideToggle()切换 ———————————————————- fadeIn([speed],[easing],[fn]),通过不透明度的变化来实现所有匹配元素的淡入效果 •speed:三种预定速度之一的字符串("slow","normal",or "fast")或表示动画时长的毫秒数值(如:1000) •easing:(Optional) 用来指定切换效果,默认是"swing",可用参数"linear" •fn:在动画完成时执行的函数,每个元素执行一次。 fadeOut([speed],[easing],[fn]),通过不透明度的变化来实现所有匹配元素的淡出效果 fadeTo([[speed],opacity,[easing],[fn]]) •speed:三种预定速度之一的字符串("slow","normal",or "fast")或表示动画时长的毫秒数值(如:1000) •opacity:一个0至1之间表示透明度的数字。 •easing:(Optional) 用来指定切换效果,默认是"swing",可用参数"linear" •fn:在动画完成时执行的函数,每个元素执行一次。 fadeToggle([speed,[easing],[fn]]),通过不透明度的变化来开关所有匹配元素的淡入和淡出效果  淡入淡出:改变透明度 fadeIn显示 fadeOut 隐藏 fadeToggle切换 fadeTo指定对象透明度 案例抽奖信息显示 <script type="text/javascript"> $(document).ready(function(){ //1 创建5区域 for(var i = 0 ; i < 5 ; i++){ createDiv(); } //2 定时器 setInterval("showDiv()",1000); }); // 显示div function showDiv(){ //2 第一次隐藏 $("div").first().slideUp("1000",function(){ //将当前对象追加到最后 $(this).appendTo($("body")).fadeIn("1000"); }); } var num = 1; //创建div function createDiv(){ var divObj = $("<div></div>"); divObj.html(num++); divObj.css({ "border": "1px solid #000", "height": "50px", "width": "500px", "margin":"5px", "font-size":"30px" }); $("body").append(divObj); } </script> </head> <body> </body> </html> 动态加载内容(缺ajax填充数据) <script type="text/javascript" src="../js/jquery-1.8.3.js"></script> <script type="text/javascript"> $(function(){ //1 创建5区域 for(var i = 0 ; i < 10 ; i++){ createDiv(); } //2 窗口滚动事件 $(window).scroll(function(){ // 1 显示区域高度 var windowHeight = $(this).height(); // 2 滚动位置 var top = $(this).scrollTop(); // 3 文档高度 var documentHeight = $(document).height(); // 1 + 2 接近 3 时 添加 if(windowHeight + top + 100 > documentHeight){ createDiv(); //发送ajax填充div内容 } //$("#showMsg").html(height + " - " + top + " - " + h); }); }); var num = 1; //创建div function createDiv(){ var divObj = $("<div></div>"); divObj.html(num++); divObj.css({ "border": "1px solid #000", "height": "100px", "width": "500px", "margin":"5px", "font-size":"30px" }); $("body").append(divObj); } </script> <style type="text/css"> #showMsg{ position: fixed; border: 1px solid #000; width: 300px; height: 30px; left: 600px; bottom: 0px; } </style> </head> <body> <div id="showMsg"></div> </body> </html> 4 Ajax【掌握】 第一层,最原始层,$.ajax,一般不使用,完成更强大功能时需要使用。例如:如果出错了,给出提示。 第二层,load、.get、.get、.post 开发中常使用用于处理ajax 第三层,.getJSON.getJSON.getScript 优化辅助 4.1 load函数 必须在jQuery对象上触发函数,发送ajax请求 load(url, [data], [callback])载入远程 HTML 文件代码并插入至 DOM 中 •url:待装入 HTML 网页网址。 •data:发送至服务器的 key/value 数据。在jQuery 1.3中也可以接受一个字符串了。 •callback:载入成功时回调函数。函数有三个参数: •data:返回内容 •textStatus: 代表请求状态的 •其值可能为: succuss, error, notmodify,timeout 4 种) •XMLHttpRequest 对象 默认使用 GET 方式 - 传递附加参数时自动转换为 POST 方式 可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码 4.2 $.get  发送的就是get请求 jQuery.get(url, [data], [callback],[type]) 通过远程 HTTP GET 请求载入信息。 •url:待载入页面的URL地址 •data:待发送 Key/value 参数。 •callback:载入成功时回调函数。 •type:返回内容格式,xml, html, script, json, text, _default。 jQuery.getScript(url, [callback]),通过 HTTP GET 请求载入并执行一个 JavaScript 文件。 •页面初次加载时不需要加载全部的javascript文件,在需要时动态加载 jQuery.getJSON(url, [data], [callback]) 通过 HTTP GET 请求载入 JSON 数据。 4.3 $.post  发送post请求 jQuery.post(url, [data], [callback],[type]),通过远程 HTTP POST请求载入信息。 •url:发送请求地址。 •data:待发送 Key/value 参数。 •callback:发送成功时回调函数。 •type:返回内容格式,xml, html, script, json, text, _default。 4.4 $.ajax  底层原始ajax请求方式  格式1:jQuery.ajax(url,[settings])  格式2:jQuery.ajax(settings); 使用json格式设置多项数据 //4 $.ajax // * async 设置是否异步,true:表示异步(ajax) // * type 设置请求方式。例如:get、post // * url 设置请求路径 // * data 请求参数 // * dataType 设置数据转换类型,例如:xml, html, script, json // * success 成功回调 // * error 错误回调 $.ajax({ "async":true, "type":"POST", "url":url, "data":params, "success":function(data){ alert(data); }, "error" : function(){ alert("错误"); } }); 4.5 表单序列化 在客户端与服务器端进行通信时,常常需要将客户端浏览器中的内容发送至服务器端进行处理。 如果需要发送的内容较少时,处理比较方便。但在真实项目中,往往需要处理的数据内容很复杂。 jQuery提供了相应的方法帮助开发者解决这个问题。 serialize()方法 •该方法作用于一个jQuery对象,可以将DOM元素内容序列化为字符串。方便客户端发送请求。 所有内容:有name,有值(非空)--文本有数据,单选多选选中,下拉列表选中等 字符串:key=value&key=value&.... 应用场景:$.get serializeArray()方法 •该方法作用于一个jQuery对象,可以将DOM元素内容序列化为JSON数据格式。 •注:此方法返回的是JSON对象而非JSON字符串。 serializeArray()将表单中所有内容转成json数组 5 Javascript跨域 域名:(英语:Domain Name),又称网域、网域名称,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。 域:服务器域名,唯一标识(协议、域名、端口)必须保证一直,说明域相同。 跨域:两个不同域名之间的通信,称之为跨域。例如:http://www.baidu.com和http://www.sina.com.cn。 跨域:在一个服务器上,去访问另一个服务器 jQuery如何实现跨域请求?使用JSONP形式实现跨域。 javascript如果调用另一个域程序,不能执行当前域js函数。 什么是JSONP •JSONP(JSON with Padding)是数据交换格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料。 •由于同源策略,一般来说位于 server.example.com 的网页无法与不是 server.example.com 的服务器沟通,而 HTML 的 <script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。 js方式 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //编码 response.setContentType("application/json;charset=UTF-8"); //1 获得请求方式 String method = request.getMethod(); System.out.println("请求方式: " + method); //2 获得请求参数 String username = request.getParameter("username"); System.out.println(username); //3 服务器返回数据--json (框架:jsonlib fastjson flex 等) String jsonStr = "{\"success\":\"用户操作成功\",\"info\":\"提示信息\"}"; //String jsonStr = "{'success':'用户操作成功','info':'提示信息'}"; //非法格式 response.getWriter().print(jsonStr); } <script type="text/javascript"> function showData(data){ alert(data.success); } </script> <script type="text/javascript" src="http://localhost/web/getData?callback=showData"></script> </head> <body> <input type="button" value="发送ajax" /> </body> jQuery方式 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //编码 response.setContentType("application/json;charset=UTF-8"); //1 获得请求方式 String method = request.getMethod(); System.out.println("请求方式: " + method); //2 获得请求参数 String username = request.getParameter("username"); System.out.println(username); //3 服务器返回数据--json (框架:jsonlib fastjson flex 等) String jsonStr = "{\"success\":\"用户操作成功\",\"info\":\"提示信息\"}"; //String jsonStr = "{'success':'用户操作成功','info':'提示信息'}"; //非法格式 response.getWriter().print(jsonStr); } <script type="text/javascript" src="../js/jquery-1.8.3.js"></script> <script type="text/javascript"> $.getJSON("http://localhost/web/getData?callback=?",function(data){ alert(data.success) }); </script> </head> <body> <input type="button" value="发送ajax" /> </body> 6 表单验证插件Validation 1.引入插件文件 2.在页面加载完毕之后,执行一段语句$(“#commentForm”).validate(); 3.在需要验证的组件中增加class=”” 必填: required email url 匿名自调 (function(){ alert("TTTT"); })(); //( )(); 作者: 杨校 出处: https://blog.csdn.net/kese7952 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

杨老师课堂之JavaScript定时器限时抢购秒杀商品案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/80346509 预览效果图: 使用到的知识点: 定时器 setInterval(函数,毫秒):在指定的毫秒数后调用函数或执行一段代码 取消定时器 clearInterval:取消由setInterval设置的定时器 函数(日期函数、parseInt函数) parseInt()函数:可解析一个字符串,并返回一个整数 示例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- 需求: 电子商务网站中,商家为了促销商品而策划一些活动,刺激消费者进行盲目消费 限时秒杀就是其中一种手段。 本次我们模拟的商品是 农夫山泉限时秒杀抢购 --> <title>农夫山泉限时秒杀</title> <!--CSS代码:--> <style type="text/css"> .box{ /*外围的大盒子样式*/ width: 702px;/*宽度702像素*/ height: 378px;/*高度378像素*/ background: url(../img/flash_sale.png);/*背景图片*/ margin: 0 auto;/*上下为0 水平居中*/ } .box div{ /*外围的大盒子内部的小盒子样式*/ width: 50px; /*宽度50像素*/ height: 50px;/*高度50像素*/ border: 1px solid darkgray;/*边界线1像素 实线 浅灰色*/ position: relative; /*使用相对定位*/ top: 260px; /*相对定位顶部距离260像素*/ float: left; /*使小盒子左浮动*/ left:305px ; /*相对定位左侧距离305像素*/ margin-left: 5px; /*两个小盒子之间空出5px*/ color: red; /*字体颜色为红色*/ text-align: center; /*字体居中显示*/ line-height: 50px; /*字体行高50像素*/ } </style> </head> <body> <!--外围的大盒子--> <div class="box"> <!--剩余的天数--> <div id="d"></div> <!--剩余的小时--> <div id="h"></div> <!--剩余的分钟--> <div id="m"></div> <!--剩余的秒数--> <div id="s"></div> </div> </body> </html> <!--JavaScript代码:--> <script type="text/javascript"> //设置秒杀结束时间 var endTime = new Date("2018-05-18 09:29:00"); //把年月日时分秒的时间转换成为毫秒数 endSeconds = endTime.getTime();//结束时间的毫秒数 //定义变量 天数 小时 分钟 秒数 var d = h = m = s = 0; //设置定时器 实现一个秒杀效果 var timer = setInterval(qiang,1000); function qiang(){ // 获取当前系统时间 var nowTime = new Date(); // 获取当前时间差---nowTime.getTime()现在时间的毫秒数 var remain = parseInt((endSeconds-nowTime.getTime())/1000); //判断秒杀是否过期 if(remain>0){ //1.计算剩余天数 (除以60*60*24 取整数 获取剩余天数) d = parseInt(remain/86400) //2.计算剩余小时(除以60*60 转换成为小时了 与24进行取模 获取剩余小时) h = parseInt((remain/3600) % 24); //3.计算剩余分钟(除以60 转换成为分钟了 与60进行取模 获取剩余分钟) m = parseInt((remain/60) % 60); //4.计算剩余秒数(与60进行取模 获取剩余秒数) s = parseInt((remain) % 60); //统一利用两位数 表示 剩余的天、小时、分钟、秒 d= d < 10 ? '0' + d:d; h= h < 10 ? '0' + h:h; m= m < 10 ? '0' + m:m; s= s < 10 ? '0' + s:s; }else{ // 秒杀过期 取消定时器 clearInterval(timer); d = h = m = s = '00' } //将剩余的天数、小时、分钟、秒 小时到指定网页中去 document.getElementById("d").innerHTML = d + '天'; document.getElementById("h").innerHTML = h + '时'; document.getElementById("m").innerHTML = m + '分'; document.getElementById("s").innerHTML = s + '秒'; } </script> 图片素材 作者: 杨校 出处:https://blog.csdn.net/kese7952 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

杨老师课堂之JavaScript定时器_农夫山泉限时秒杀案例

预览效果图: 使用到的知识点: 定时器 setInterval(函数,毫秒):在指定的毫秒数后调用函数或执行一段代码 取消定时器 clearInterval:取消由setInterval设置的定时器 函数(日期函数、parseInt函数) parseInt()函数 :可解析一个字符串,并返回一个整数 示例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- 需求: 电子商务网站中,商家为了促销商品而策划一些活动,刺激消费者进行盲目消费 限时秒杀就是其中一种手段。 本次我们模拟的商品是 农夫山泉限时秒杀抢购 --> <title>农夫山泉限时秒杀</title> <!--CSS代码:--> <style type="text/css"> .box{ /*外围的大盒子样式*/ width: 702px;/*宽度702像素*/ height: 378px;/*高度378像素*/ background: url(../img/flash_sale.png);/*背景图片*/ margin: 0 auto;/*上下为0 水平居中*/ } .box div{ /*外围的大盒子内部的小盒子样式*/ width: 50px; /*宽度50像素*/ height: 50px;/*高度50像素*/ border: 1px solid darkgray;/*边界线1像素 实线 浅灰色*/ position: relative; /*使用相对定位*/ top: 260px; /*相对定位顶部距离260像素*/ float: left; /*使小盒子左浮动*/ left:305px ; /*相对定位左侧距离305像素*/ margin-left: 5px; /*两个小盒子之间空出5px*/ color: red; /*字体颜色为红色*/ text-align: center; /*字体居中显示*/ line-height: 50px; /*字体行高50像素*/ } </style> </head> <body> <!--外围的大盒子--> <div class="box"> <!--剩余的天数--> <div id="d"></div> <!--剩余的小时--> <div id="h"></div> <!--剩余的分钟--> <div id="m"></div> <!--剩余的秒数--> <div id="s"></div> </div> </body> </html> <!--JavaScript代码:--> <script type="text/javascript"> //设置秒杀结束时间 var endTime = new Date("2018-05-18 09:29:00"); //把年月日时分秒的时间转换成为毫秒数 endSeconds = endTime.getTime();//结束时间的毫秒数 //定义变量 天数 小时 分钟 秒数 var d = h = m = s = 0; //设置定时器 实现一个秒杀效果 var timer = setInterval(qiang,1000); function qiang(){ // 获取当前系统时间 var nowTime = new Date(); // 获取当前时间差---nowTime.getTime()现在时间的毫秒数 var remain = parseInt((endSeconds-nowTime.getTime())/1000); //判断秒杀是否过期 if(remain>0){ //1.计算剩余天数 (除以60*60*24 取整数 获取剩余天数) d = parseInt(remain/86400) //2.计算剩余小时(除以60*60 转换成为小时了 与24进行取模 获取剩余小时) h = parseInt((remain/3600) % 24); //3.计算剩余分钟(除以60 转换成为分钟了 与60进行取模 获取剩余分钟) m = parseInt((remain/60) % 60); //4.计算剩余秒数(与60进行取模 获取剩余秒数) s = parseInt((remain) % 60); //统一利用两位数 表示 剩余的天、小时、分钟、秒 d= d < 10 ? '0' + d:d; h= h < 10 ? '0' + h:h; m= m < 10 ? '0' + m:m; s= s < 10 ? '0' + s:s; }else{ // 秒杀过期 取消定时器 clearInterval(timer); d = h = m = s = '00' } //将剩余的天数、小时、分钟、秒 小时到指定网页中去 document.getElementById("d").innerHTML = d + '天'; document.getElementById("h").innerHTML = h + '时'; document.getElementById("m").innerHTML = m + '分'; document.getElementById("s").innerHTML = s + '秒'; } </script> 图片素材 作者: 杨校 出处:https://www.cnblogs.com/xiaoxiao5016/ 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

杨校老师课堂之JavaScript右下角广告弹框教程

案例制作思路: 1、先制作界面 添加一个盒子包含一个按钮,使盒子绝对定位在右上角 添加一个大盒子,同理,将盒子居于左下角;其中内部包含一个顶端盒子和底部盒子 顶端盒子因为是属于大盒子内部的存在,所以宽度是占满整个大盒子的宽度,内部文本设置字体12号、居中显示、加粗 底部盒子因为也是属于大盒子内部的存在,所以宽度也是占满整个大盒子的宽度,内部文本设置字体12号、居中显示、加粗、行高等 2、经思考分析,因为页面是在打开后3秒中进行跳转,所以需要一个延迟定时器(SetTimeout(code,millisec); code是代表一个函数的引用,millisec代表定时的毫秒数) 。所以页面一打开是没有广告存在的,所以在大盒子的css中不存在高度的设置,另设置了隐藏显示的属性! 3、获取盒子的位置,并且设置其高度,进行接收。但是因为后的是一个对象,需要将对象进行转换成为数字。 4、如果该数字等于0 ,表示该盒子处于隐藏的状态,则将其通过display属性中的block块状 来显现出来。【此时在右下角已然存在盒子了,只不过高度为0,需要放大进行查看】 5、接下来,我们来操作盒子的高度问题。 解决方案:我们可以通过定时器去完成盒子的高度设置。 5.1.1、获取盒子 5.1.2、获取盒子的高度 5.1.3、判断接收到的参数是盒子高度递增或递减,若是递增参数,则需要判断盒子是否依然显示,若没有,将其递增显示,否则清除递增定时器。 若是递减参数,则需要判断盒子是否依然显示,若显示,将其递减到0,否则清除递增定时器并且隐藏盒子。 预览效果图: Html代码: <html> </head> <body> <div id="div"> <button onclick="tips_pop()">3秒后会在右下角自动弹出窗口,如果没有弹出请点击这个按钮</button> </div> <!--大盒子--> <div id="ad"> <!--顶端小盒子--> <div class="toppop"> <b>您有新的短消息!</b><span onclick="tips_pop()">X</span> </div> <!--底端小盒子--> <div class="bottompop">1条未读信息(...)</div> </div> </body> </html> Css代码: #div{ /*按钮盒子*/ position: absolute; /*大盒子的定位为绝对定位*/ right: 0; /*大盒子距离右方为0像素*/ top: 0; /*大盒子距离上方为0像素*/ } #ad{ /*大盒子*/ width: 200px; /*大盒子的宽度*/ height: 0; /*大盒子的高度*/ border: 1px solid #666;/*边框线为1像素 实线 灰黑色*/ position:absolute; /*大盒子的定位为绝对定位*/ bottom: 0px; /*大盒子距离下方为0像素*/ right: 0px; /*大盒子距离右方为0像素*/ display: none; /*不显示*/ } .toppop{ /*顶端盒子*/ width: 100%; /*宽度自动适应到最宽*/ height: 22px; /*上面的盒子高22像素*/ background: gold; /*背景颜色为金黄色*/ text-align: center; /*字体居中*/ font-size: 12px; /*字号为12像素*/ } .toppop span{ /*顶端盒子 中的 X*/ position: absolute; /*位置:绝对定位*/ right: 0; /*距离右侧边距为0*/ top: -1px; /*距离顶端距离为-1像素*/ color: #fff; /*“X”的颜色为白色*/ cursor: pointer; /*cursor 代表的是光标的类型;pointer代表 的是 一只小手*/ } .bottompop{ /*底端盒子*/ width: 100%; /*宽度自动适应到最宽*/ height: 88px; /*下面的盒子高88像素*/ font-size: 12px; /*字号为12像素*/ text-align: center; /*字体居中*/ font-weight: 900px; /*字体为粗体*/ color: #ff0000; /*颜色为红色*/ line-height: 80px; /*字体的行高为80像素*/ JavaScript代码: <script type="text/javascript"> window.onload = function(){ // 页面加载 document.getElementById("ad").style.height = '0px' // setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout("tips_pop()",3000); // 设置定时器(每过3秒执行一次tips_pop) } function tips_pop(){ var Msgpop = document.getElementById("ad"); // parseInt() 函数可解析一个对象,并返回一个整数 var popH = parseInt(Msgpop.style.height) // 将对象的高度转换成为数字 if(popH == 0){ //如果盒子的高度等于0 ,表示看不到 所以 处于一个隐藏状态 Msgpop.style.display="block"; //如果等于0,则去显示出来 show = setInterval("changeH('up')",3)// 设置定时器(显示的函数) }else{ hide = setInterval("changeH('down')",3)// 设置定时器(隐藏的函数) } } function changeH(str){ var Msgpop = document.getElementById("ad");//Msgpop 代表的是大盒子 var popH = parseInt(Msgpop.style.height);//将对象的高度转换成为数字 //popH 代表盒子的高度 [是数字] if(str == 'up'){ // 判断接受的参数是否是 up 如果是 则执行下方内容 if(popH <= 100){ //JavaScript toString()把数字转换为字符串: Msgpop.style.height = (popH + 4).toString() + 'px';//设置大盒子的高度 }else{ clearInterval(show); } } if(str == 'down'){ if(popH>=4){ Msgpop.style.height = (popH - 4).toString() + 'px';//设置大盒子的高度 }else{ clearInterval(hide); // 清除定时器(隐藏的函数) Msgpop.style.display = 'none'; //隐藏该盒子 div } } } 作者: 杨校 出处:http://www.cnblogs.com/xiaoxiao5016 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

杨老师课堂_安卓教程第一篇之入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/78852369 1.1G-4G g:generation 代 3g:第三代移动通信技术 1g: 大哥大 特点:安全性差,容易受干扰,通话不稳定,不能发短信 2g:小灵通等功能机 特点:通话质量稳定,可以发短信彩信,简单wap上网,支持一些简单的java游戏 3g:android ios 等智能手机 特点:上网快了很多,能够处理图像,音乐,视频流等多种媒体形式. 4g: lte , long time evolution 特点: 上网速度更快,100M带宽。 区别:网速不同,处理的内容不同 2.Android操作系统介绍 android系统是由安迪鲁宾团队开发的,最初用于数码相机,2005.08被google收购 android名字是因为安迪鲁宾喜欢一个游戏的人物--大瓢虫 android图标:上厕所的灵感 android应用范围:手机,平板,智能家居,穿戴设备。 3.Android进化史 2.3 比较稳定的一个版本 ,NFC 近场通信技术 3.0 专为平板设计 4.1.2 4.0后比较稳定的版本,4.*同时支持平板和手机 5.0 新特性 4.Android系统架构(重点) 分层的架构 JNI java native interface 1.application :应用层 ; java 2.application framework :应用框架层 , java+JNI 3.libraries 和 dalvik : 函数库和虚拟机层, c/c++ 4.linux kernel : linux 内核驱动层, c 5.两种虚拟机的不同 (熟练了解) 版权问题: jvm : java虚拟机 sun dvm: dalvik虚拟机 google 区别: 1.基于的架构不同,jvm 基于栈架构,栈是位于内存上的一个空间,执行指令操作,需要向cpu寻址; dvm 基于寄存器架构,寄存器是cpu的一个组成部分,执行指令操作无需寻址直接执行。 2.执行文件的格式不同,jvm执行的是多个.class文件。 dvm执行的是一个.dex文件 6.art 模式 android runtime 空间换时间的概念。 art:程序在安装时需要预编译读取,将代码转换为机器码,好处:程序运行时,无需时时转换,运行速度快 ; 缺点:安装时间稍长,由于转换机器码,所以占用略高的存储空间。 7.开发环境的搭建 1.JDK 32 64 2.开发工具,eclipse , android studio 3.android sdk , sdk: soft developer kit adt : android develper tool bundle:集 apilevel : 19 4.4版本 18 4.3 11 3.0 10 2.3 8 2.2 aapt:android application package tool adb : 建立电脑与手机之间的链接 dx.bat : 将多个.class 打包成一个.dex sdk下的目录: add-ons:预留的一个附加目录 build-tools:构建工具目录 docs: 文档目录 extras:开发中额外提供的一些工具及jar platforms: 不同版本android的核心jar包 platforms-tools:平台一些相关的工具 sources:源码 system-images:系统镜像文件 tools:开发中使用的一些工具,如9path,做图片拉伸适配的。 8.Android SDKManager介绍 9.模拟器的简介及创建 常用的屏幕分辨率: 3.2 ----- QVGA ------320*480 3.7 ----- WVGA ------480*800 4.7 -----WXGA ------1280*720 10.DDMS介绍 ddms: dalvik debug manitor services devices: 列出当前电脑所连接的所有android设备,及android设备运行的进程,结束一个进程,设置程序为debug模式,截屏。 logcat: 会打印系统运行过程中所有日志信息。 file explorer: 列出当前设备所有目录。 /data/app:安装的第三方apk都在此目录 /system/app: 系统预装应用apk在此目录 /data/data:应用的私有目录,系统每安装一个新的应用程序,都会在此目录创建该应用包名的文件,用来存放该应用的私有数据,当应用卸载时,该包名的文件夹也会被删除。 /sdcard :外部存储目录,一般会链接指向到另一个目录,用来存放大数据。 11.创建HelloWorld工程 部署运行的三种方式: 1.右击工程,run as 2.工具栏的按钮 3.快捷键:ctrl+F11 12.android工程目录结构 img: ../img/a.jpg src: java 源码代码 gen: 自动生成的文件目录,不需要修改; R类 ,是对资源文件的一个索引 android核心jar包和第三方jar包 assets:资产目录,用来存放程序运行过程中所需要的一些工具,数据库 bin:编译打包过程中产生的目录 libs: res: drawable:图片资源 layout:布局资源 menu:菜单资源 values: demins 长度相关, string:字符串 style 样式 androidManifest.xml: 清单文件, 包名,版本号,版本名称,最低运行版本,图标,应用名称,程序的入口activity, 还可以配置应用程序使用的权限信息。 13.Android的打包过程 jdk dx.bat aapt 签名jarsigner .java -----> .class ------>.dex(res,assets,androidmanifest.xml)------->.apk--------->final apk 14.ADB指令练习 (重点) ADB :android debug bridge 建立手机与电脑直接的连接 adb运行的端口号是5037 环境变量的配置:C:\kaifa\adt-bundle-windows-x86_64_20140101\sdk\platform-tools 1.adb devices :列出当前电脑所连接的android设备 2.adb push pc_path phone_path :将电脑端文件放到手机端 3.adb pull phone_paht pc_path :将手机端文件拉到电脑端 4.adb install [-r] apkpath ; 安装一个电脑端的apk文件。-r:强制安装 5.adb uninstall packagename; 卸载一个应用 6.adb kill-server : 结束adb服务的链接 7.adb start-server :开启adb服务的链接 8.netstat -oan 查看端口: 查看端口 9.adb shell:进入当前设备linux环境下 10.adb shell + ls -l :查看当前设备的目录结构 11.adb shell+ logcat :查看系统运行中的日志信息 注意: 如果当前电脑链接的是多台android设备,需要指定操作的是哪台设备,需要在adb后加 -s 设备序列号。 15.电话拨号器(重点) 1.产品经理: 需求分析文档,设计原型图 2.UI工程师: 设计UI界面 3.架构师: 写架构,接口文档 4.码农: 服务端,客户端 1.写布局界面 2.写业务逻辑 1.通过布局文件中对控件配置的id,在activity中可以获取控件的对象,Edittext Button findViewById(int id); 2.为按钮设置点击事件 bt_callphone.setOnclickListener( OnclickListener listener); 3.在点击事件的onclick方法中,找到用户输入的电话号码 4.创建一个Intent对象 Intent intent = new Intent(); 5.为Intent对象设置一个打电话的动作 intent.setAciton(Intent.ACTION_CALL); 6.位Intent对象设置一个数据 intent.setData(Uri.parser("tel:"+number)); 7.启动Intent对象 startActivity(intent); 8.在androidmanifest.xml中设置一个打电话的权限 <uses-permission android:name="android.permission.CALL_PHONE"/> 5.测试工程师: 测试应用 6.运营人员: 写软文,上传应用 7.商务合作: 买量,买广告位,卖广告位 16.四种方法写按钮点击事件 17.Android中常用布局 (多练习) table div+css

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册