1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <form action ="" > <input type ="text" placeholder ="请输入6-8个数字" pattern ="\d{6,8}" name ="user" autocomplete ="off" id ="" /> <input type ="submit" value ="提交" formaction ="http://www.baidu.com" /> </form > <form action ="" > <input type ="text" name ="username" id ="" autofocus required /> <input type ="password" name ="" id ="" required /> </form > <input type ="text" list ="varList" /> <datalist id ="varList" > <option value ="javascript" > javascript</option > <option value ="html" > html</option > <option value ="css" > css</option > </datalist >
JS 延迟加载
1 2 3 4 5 6 7 8 9 <script src ="a.js" defer ="defer" > </script > <script src ="a.js" defer ="defer" > </script > <script src ="a.js" defer ="defer" > </script > <script src ="a.js" async ="async" > </script > <script src ="b.js" async ="async" > </script > <script src ="c.js" async ="async" > </script >
捕获右键菜单事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <ul id ="myMenu" > <li > 111</li > <li > 222</li > <li > 333</li > </ul > <script > var menu = document .querySelector ("#myMenu" ) document .addEventListener ( "contextmenu" , (event ) => { event.preventDefault () menu.style .left = event.clientX + "px" menu.style .top = event.clientY + "px" menu.style .visibility = "visible" }, false ) document .addEventListener ( "click" , (event ) => { menu.style .visibility = "hidden" }, false ) </script >
DOMContentLoaded 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完成加载。另一个不同的事件 load 应该仅用于检测一个完全加载的页面。 在使用 DOMContentLoaded 更加合适的情况下使用 load 是一个令人难以置信的流行的错误,所以要谨慎。注意:DOMContentLoaded 事件必须等待其所属 script 之前的样式表加载解析完成才会触发。 load 是在所有资源加载完成后才触发。
readystatechange 当文档的 readyState 属性发生改变,readystatechange 事件会被触发。
1 2 3 4 5 6 7 8 9 document .readyState === "complete" document .onreadystatechange = function ( ) { if (document .readyState === "interactive" ) { initApplication () } }
dragable 全局属性 draggable 是一个枚举类型的属性,用于标识元素是否允许使用 拖放操作 API 拖动。它的取值如下:
true,表示元素可以被拖动
false,表示元素不可以被拖动
如果该属性没有设值,则默认值 为 auto ,表示使用浏览器定义的默认行为。 这个属性是枚举类型,而不是 Boolean 默认情况下,只有已选中的文本、图片、链接可以拖动。对其它的元素来说,必须按拖动机制的顺序设置 ondragstart 事件才能正常工作:
1 2 3 4 5 6 <div draggable ="true" ondragstart ="event.dataTransfer.setData('text/plain', 'This text may be dragged')" > This text <strong > may</strong > be dragged. </div >
Drag Data 每一个 drag events 都有一个 dataTransfer 属性,用于保存 drag data,dataTransfer 是一个 DataTransfer 对象。 使用 setData(type, value)来设置值。 例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 <style > .container { display : flex; flex-direction : row; } #draggable { width : 100px ; height : 100px ; background : white; justify-content : center; line-height : 100px ; display : flex; } .dragger-container { margin : 0 2px ; width : 100px ; height : 100px ; background-color : gray; padding : 10px ; } </style > <div class ="container" > <div class ="dragger-container" > <div id ="draggable" draggable ="true" > Drag me</div > </div > <div class ="dragger-container" > </div > <div class ="dragger-container" > </div > <div class ="dragger-container" > </div > </div > <script > window .onload = function ( ) { let dragged document .addEventListener ( "dragstart" , (event ) => { dragged = event.target }, false ) document .addEventListener ( "dragover" , (event ) => { event.preventDefault () }, false ) document .addEventListener ( "drop" , (event ) => { event.preventDefault () if (event.target .className == "dragger-container" ) { dragged.parentNode .removeChild (dragged) event.target .appendChild (dragged) } }, false ) } </script >
storage
sessionStorage: 关闭页面时会清空
localStorage: 关闭页面时不会清空
两者 API 一致。
requestAnimationFrame(callback) 表示在重绘前执行指定的回调函数,一个栗子:
1 2 3 4 5 <div id ="root" style ="width: 50px; height: 50px; background-color: red; position: relative;" > </div > <script src ="./test.js" > </script >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 let root = document .querySelector ("#root" )let flag = true let left = 0 requestAnimFrame = (() => requestAnimationFrame || webkitRequestAnimationFrame || mozRequestAnimationFrame || ((callback ) => { setTimeout (callback, 1000 / 60 ) }))() ;(function _animation ( ) { left == 0 ? (flag = true ) : left == 100 ? (flag = false ) : "" flag ? (root.style .left = `${left++} px` ) : (root.style .left = `${left--} px` ) requestAnimFrame (_animation) })()