作者: admin

  • 1、jQuery总体轮廓

    //请按 数字的顺序看,代码过多可以用关键词 //1 的方法去搜索代码
    //1 这里用匿名函数自动用的原因是,在匿名函数里面的 变量和方法就算跟外界有相同的名称也不会用冲突,因为外界访问不到匿名函数里面的变量和方法。
    // 第一个参数是传入的是window对象,第二个参数什么都不传入,在什么都不传入的情况下此参数就是纯undefined,这么做的原因是为了保证undefined的参数的值就是undefined,因为有些浏览器是这个修改undefined的值的但有些浏览器不能修改,为了兼容性,在什么都不传入的情况下此参数就是纯undefined。

    //2,传入第一个参数是window,其实也可以不用传当函数里面找不到window的时候,JS会根据作用域链往父亲作用域找,还找不到就去爷爷作用域找,但是这样消耗资源,如果直接引入window的话就免去寻找的时间了,第二参数什么都不加,如果什么都不加在函数里面此参数的值肯定是undefined。

    //3 声明一个函数名称是jQuery并且自调用。

    //4 在window对象下声明一个$和jQuery,这样jquery就是window下扩展出来的一个对象了,同时他的作用也是为了缩写jQuery用$代替。

    //5 在jQuery函数里面又定义了一个jQuery函数,在代码的41行处又返回了一个jQuery给jQuery其实都是一样的,就好像是自己的一台手机给人加工扩展了新的功能后又还给了自己,最后这手机还是你的。

    //6 每声明一个函数的时候都会存在着这么一个空的原型对象,这是JS基础。这行代码的作用其实也就是简化了prototype的长度为fn而已。所以$.fn 也就是调用了jQuery.prototype等价的。这行代码也覆盖了//3处的构造函数jQuery的原型对象

    //7 此代码的作用 去看https://sdeno.com/wp-content/uploads/2014/09/Untitled-1.html

    //8 在jq的原型对象中扩展的一个方法

    //9 这里面是init自己的属性和方法也就是 //10中实例化并返回给jQuery的,所以 平时我们写的$()调用的其实就是 这里面的属性和方法了。真相终于大白了!!

    //10 此处return了一个实例化对象给了jQuery,这里实例化的对象就是jQuery原型对象中的init方法,以后我们调用jQuery()的时候其实也就是调用了 jQuery.fn.init实例化后的对象,既然是对象的话我们就能以 object.xx的形式去调用里面的属性和方法。以往我们看到的 $().height() $().css() 的这样形式就是这句话的作用。

    //11 这里定义的是一堆jQuery原型属性和方法

    //12 之前说过$()调用的是jQuery.fn.init里面的属性和方法,但是为什么$()也能够调用//11处jQuery原型属性和方法呢?,这就是这段代码的作用了。你只需要这么理解//6 jQuery.prototype里面的代码全部给了 //8 jQuery.fn.init.prototype来继承当然也其中包括了 //11处的代码,所以$()也能够调用//11处jQuery原型属性和方法了,又一次真相大白。

    //13

    (function(window,undefined){ //1
      var jquery=(function(){ //3
       /*----------------------------*/
         var jquery=function(select,context){ //5
             return new jquery.fn.init(select,context,rootjquery); //10
         };
         jquery.fn=jquery.prototype={ //6
            constructor:jquery, // 7
            init:function(select,context,rootjquery){ //8
               //9
            }
            //11
         };
         jquery.fn.init.prototype=jquery.fn; //12
         jquery.extend=jquery.fn.extend=function(){}; //13
         jquery.extend({ });
         return jquery;
         /*----------------------------*/
       })();
       window.jquery=window.$=jquery; //4
    })(window); //2

    演示文档下载

     

    别人的解剖分析(推荐看):https://github.com/chokcoco/jQuery-

  • 禁用谷歌浏览器自动更新以及提供48版本下载

    chrome://plugins/ 下 停用 .GOOGLE UPDATE

     

    控制面板-管理工具-服务-找到两个GOOGLE UPDATE 设置为 禁用
    控制面板-管理工具-系统配置-启动 把GOOGLE UPDATE 对勾去掉。

    http://zhidao.baidu.com/link?url=PEpypPO2EEQz0e0ghtuDAI2wW7SrJ640uWfy9kxJueRFHdzavwzZSLafy27HIln4PpmAD5KR4s2esHOSYMriUn3d7O5LXBIGkgkvdj5XVy7

    谷歌48版本

    http://down5.d9soft.com:801/www.d9soft.com/chrome_installer_d9soft.com.zip

    http://pan.baidu.com/s/1bnPV5BD

  • HTML5 video 视频标签全属性详解

    现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera、Mozilla、Chrome),支持H.264的(Safari、IE 9、Chrome),都不支持的(IE6、7、8)。好吧,现在让我们从技术层面来认识HTML 5的视频,包括video标签的使用,视频对象可以用到的媒介属性和方法,以及媒介事件。

    Video标签的使用

    Video标签含有src、poster、preload、autoplay、loop、controls、width、height等几个属性, 以及一个内部使用的标签<source>。Video标签内除了可以包含<source>标签外,还可以包含当指定的视频都不能 播放时,返回的内容。

    (1) src属性和poster属性

    你能想象src属性是用来干啥的。跟<img>标签的一样,这个属性用于指定视频的地址。而poster属性用于指定一张图片,在当前视频数据无效时显示(预览图)。视频数据无效可能是视频正在加载,可能是视频地址错误等等。

    <video width=”658″ height=”444″ src=”http://www.youname.com/images/first.mp4″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay”></video>

    (2) preload属性

    这个属性也能通过名字了解用处,此属性用于定义视频是否预加载。属性有三个可选择的值:none、metadata、auto。如果不使用此属性,默认为auto。

    <video width=”658″ height=”444″ src=”http://www.youname.com/images/first.mp4″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” preload=”none”></video>

    None:不进行预加载。使用此属性值,可能是页面制作者认为用户不期望此视频,或者减少HTTP请求。

    Metadata:部分预加载。使用此属性值,代表页面制作者认为用户不期望此视频,但为用户提供一些元数据(包括尺寸,第一帧,曲目列表,持续时间等等)。

    Auto:全部预加载。

    (3) autoplay属性

    又是一个看名字知道用处的属性。Autoplay属性用于设置视频是否自动播放,是一个布尔属性。当出现时,表示自动播放,去掉是表示不自动播放。

    <video width=”658″ height=”444″ src=”http://www.youname.com/images/first.mp4″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” preload=”none”></video>

    注意,HTML中布尔属性的值不是true和false。正确的用法是,在标签中使用此属性表示true,此时属性要么没有值,要么其值恒等于他的名字 (此处,自动播放为<video autoplay />或者<video autoplay=”autoplay” />);而在标签中不使用此属性表示false(此处不进行自动播放为<video />)。

    (4) loop属性

    <video width=”658″ height=”444″ src=”http://www.youname.com/images/first.mp4″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” loop=”loop”></video>

    一目了然,loop属性用于指定视频是否循环播放,同样是一个布尔属性。

    (5) controls属性

    <video width=”658″ height=”444″ src=”http://www.youname.com/images/first.mp4″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” preload=”none” controls=”controls”></video>

    Controls属性用于向浏览器指明页面制作者没有使用脚本生成播放控制器,需要浏览器启用本身的播放控制栏。

    控制栏须包括播放暂停控制,播放进度控制,音量控制等等。

    每个浏览器默认的播放控制栏在界面上不一样。由于我浏览器的诡异问题,Firefox和Safari的Video标签不正常,所以这两个只能在网上找截图了。

    (6) width属性和height属性

    属于标签的通用属性了,这个不用多说。

    (7) source标签

    <video width=”658″ height=”444″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” preload=”none” controls=”controls”><source src=”http://www.youname.com/images/first.ogv” /><source src=”http://www.youname.com/images/first.ogg” /></video>

    Source标签用于给媒体(因为audio标签同样可以包含此标签,所以这儿用媒体,而不是视频)指定多个可选择的(浏览器最终只能选一个)文件地址,且只能在媒体标签没有使用src属性时使用。

    浏览器按source标签的顺序检测标签指定的视频是否能够播放(可能是视频格式不支持,视频不存在等等),如果不能播放,换下一个。此方法多用于兼容不同的浏览器。Source标签本身不代表任何含义,不能单独出现。

    此标签包含src、type、media三个属性。

    src属性:用于指定媒体的地址,和video标签的一样。

    Type属性:用于说明src属性指定媒体的类型,帮助浏览器在获取媒体前判断是否支持此类别的媒体格式。

    Media属性:用于说明媒体在何种媒介中使用,不设置时默认值为all,表示支持所有媒介。你想到<style>标签的media属性了么?一样一样一样的。

    (8) 一个完整的例子

    <video width=”658″ height=”444″ poster=”http://www.youname.com/images/first.png” autoplay=”autoplay” preload=”none” controls=”controls”><source src=”http://www.youname.com/images/first.ogv” /><source src=”http://www.youname.com/images/first.ogg” /></video>

    这段代码在页面中定义了一个视频,此视频的预览图为poster的属性值,显示浏览器的默认媒体控制栏,预加载视频的元数据,循环播放,宽度为900像素,高度为240像素。

    第一选择视频地址为第一个source标签的src属性值,视频类别为Ogg视频,视频编码译码器为Theora,音频编码译码器为Vorbis,播放媒 介为显示器;第二选择视频地址不再累述。如果你还要兼容IE的话,可以在最后一个source标签后再加上Flash播放器的标签集,或者使用一点 JavaScript代码。

     

    http://www.cnblogs.com/kiter/archive/2013/02/25/2932157.html

  • 让所有浏览器都支持html5 video标签

    高版本的浏览器自然就不用说了,主要是考虑低版本的浏览器。

    video_h5

    高版本的浏览器能自动解析video标签播放视频,如果遇到低版本的浏览器就自动切换回flash播放,此插件兼容IE6以上

    <script src="//api.html5media.info/1.1.8/html5media.min.js"></script>
    <!--[if lt IE 9]><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.min.js"></script><![endif]-->

     

    简单使用:

    <audio class="audio" controls preload>
      <source src="//media.html5media.info/audio.mp3"></source>
      <source src="//media.html5media.info/audio.ogg"></source>
    </audio>

     

     

    <video class="video" poster="//media.html5media.info/poster.jpg" width="618" height="347" controls preload>
      <source src="//media.html5media.info/video.mp4" media="only screen and (min-device-width: 568px)"></source>
      <source src="//media.html5media.info/video.iphone.mp4" media="only screen and (max-device-width: 568px)"></source>
      <source src="//media.html5media.info/video.ogv"></source>
    </video>

    https://sdeno.com/wp-content/uploads/2016/03/h5_video/video/

    http://pan.baidu.com/s/1borFaLx

     

    相关:《HTML 5 video 视频标签全属性详解

  • 谷歌调试页面,Chrome开发者工具的实用技巧(译)

    谷歌插件

    g1

    最近我比平时多花了点时间在chrome开发者工具上。过程中我发现了一些我以前没有遇到过的好的特性(至少我没有主动去研究的;像:blackboxing和asynchronous stacktraces)。因此,我想总结下我认为非常不错的特性给大家。

    • 这个小的放大镜图标指向这个元素的CSS的属性最终是在哪个CSS文件里定义。举例子来说,选择“检查”在页面上的任意DOM元素,并切换到“Computed”的子标签。找到你关心的CSS属性并点击放大镜图标,就会直接进入对应的css文件(当你的项目是个很大的web应用时,这个功能是非常有用的).

    g2

    • 如果想看到XHRs的请求信息,可以选中“Log XMLHttpRequests”的复选框,在“Setting”频道下的Console部分。在知道这个功能之前,我得设置浏览器代理像Burp来完成这样的功能。当然,使用代理你可以有机会来修改XHRs在真正到达服务器之前,这是一个很好的方式来完成安全测试。类似的更简便的方式是使用“Sources::XHR Breakpoints”并启用“Any XHR”断点。

    g3

    • 现在,假设你工作的web应用正在有规律的发送XHR请求(举例子,保持当前页面为最新)并想知道这个定时器在哪里(即什么地方调用setTimeout()或setInterval())。弄明白这些,你需要切换到“Sources”标签,并选中“Async”复选框。这会让你所有的堆栈继续执行当遇到setTimeout()的时候,甚至是多层次的嵌套。对于像requestAnimationFrame()和addEventListener()等同样使用。你可以找到设置的地方如下:

    g4

    • 想快速的找到你点击某个特定的按钮或者链接的运行代码,只需要在你点击按钮前启用“Event listener breakpoint” Mouse::Click(另外一个在大型web应用时会用到的杀手级的特性):

    g5

    • 当你使用“Event listener breakpoint :: Mouse :: Click”的时候,你很可能会进入到第三方的代码库像jQuery,这时候你就需要花费一些调试的时间来到达真正的事件处理函数。最好的方法是标记“Blackbox Script”避免进入到第三方的脚本。调试时就再不会进入第三方的脚本库了,代码会一直运行到没有标记blackboxed的文件为止。你可以blackbox脚本通过右击调用栈里的第三方库的文件,并从上下文菜单中选择“Blackbox Script”即可:

    g6

    • 你可以跳转到特定的文件,通过文件名,使用“ctrl-p”(像atom中一样)

    g7

    • 你可以跳转到一个方法,通过方法名(只在当前打开的文件中),使用“ctrl-shift-p”:

    g8

    • 你可以全文搜索通过”ctrl-shift-f”:

    g9

    • 你可以使用多个选择提示来编辑,选中一些字符并按下“ctrl-d”,会根据你按下的次数来选中相应的字符(就像atom那样).对于像重命名变量非常有用。

    g10

    • 网站的代码可以本地存储,并在开发模式编辑然后可以直接存储到本地磁盘。实现这个功能,切换到源码标签,右键点击“Add Folder to Workspace”,并最后选择你工程项目的存储位置即可。此外,右键点击本地映射文件,选择“Map to Network Resource…”就会加载相应的“网络”文件了

    g11

    其它小贴士:

    • $0 在console的时候,代表你在页面选中的元素。
    • 你可以执行XPath表达式通过$x(“//p”) 这种方式(当你使用selenium 测试用例和CSS选择器时并不总有效的时候会非常有用)

       

       

    我再推荐两个chrome扩展插件:

    总之,我很喜爱开发者者工具,唯一令我不爽的是我不能自定义键盘快捷键: