2018年前端年末小结

前言:2018年即将接近尾声,现对前端基础做一个小结与巩固。

【一、HTML+CSS】:

<!-- 声明为 HTML5 文档,不区分大小写:<!doctype html> -->
<!DOCTYPE html>
<!-- HTML文档的后缀名可以是:.htm -->
<html>
<head>
<!-- 中文网页需要使用 <meta charset="utf-8"> 声明编码 -->
<meta charset="utf-8">
<title>网页标题</title>
<!-- 内部样式(单一页面对应) -->
<style type="text/css">
#div1, #div2{
width:150px; height:50px; margin:10px 0;padding:10px;border:1px solid #aaaaaa;
}
p:first-child{
background:yellow;
}
a:hover{
/* text-decoration:none; */
border: 1px solid;
padding: 5px;
border-radius: 50%;
}
</style>
<!-- 外部样式(推荐:切换主题) -->
<link rel="stylesheet" type="text/css" href="#"/>
<!-- <script src="#" type="text/javascript" charset="utf-8"></script> -->
</head>
<body>
<!-- 多数标签是成对的:均具有四个通用属性:id+ -->
<h1 id="abc">我的第一个标题</h1>
<p class="className" style="-moz-animation: .25s, 100ms;" title="我的第一个段落">
翻译: <q>My first paragraph.</q><br/>
<b>粗体文本</b><br/>
<code>计算机代码</code><br/>
<em>强调文本</em><br<br/>/>
<i>斜体文本</i><br/>
<kbd>键盘输入</kbd> <br/>
<pre>预格式化文本</pre><br/>
<small>更小的文本</small><br/>
<strong>重要的文本</strong><br/>
<abbr> (缩写)</abbr><br/>
<address> (联系信息)</address><br/>
<!-- (文字方向) -->
<p><bdo dir="rtl">该段落文字从右到左显示。</bdo></p>
<blockquote> (从另一个源引用的部分)</blockquote><br/>
<cite> (工作的名称)</cite><br/>
<del> (删除的文本)</del><br/>
<ins> (插入的文本)</ins><br/>
<sub> (下标文本)</sub><br/>
<sup> (上标文本)</sup><br/>
</p>

<!-- 单标签、块标签占少数,块标签不会自动换行,行标签占一行可以转换为块标签 -->
<br/>
<span>块标签</span>
<br/>
<!-- 对比路径引用+去除下划线 -->
<a href="#abc" target="_blank" style="text-decoration:none;">回到顶栏并跳转新页面</a>
<br/>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<img id="drag1" src="#" alt="可拖拽的图片" width="120" height="30" draggable="true" ondragstart="drag(event)"/>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<hr/>
<h6>最小的标题:<del>javascript</b></h6>
<!-- 文本框 -->
<textarea rows="10" cols="30" id="demo">我是一个文本框</textarea>
<br/>
<!-- 表单 -->
<form name="input" action="html_form_action.php" method="get">
Username: <input type="text" name="user">
<input type="submit" value="Submit">
</form>
<button type="button" onclick="myFunction()" style="color: red;">点击按钮</button>
<!-- 脚本 -->
<script type="text/javascript">
//img:drag阻止默认事件+draggable允许拖拽
function drag(ev){
ev.dataTransfer.setData("Text",ev.target.id);
}
//***********************************************
//div
function drop(ev){
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
function allowDrop(ev){
ev.preventDefault();
}
//点击
function myFunction(){
document.getElementById("demo").style.color="greenyellow";
alert("点击改变demo样式")
}
</script>
<!-- 菜单列表:去除点 -->
<ul style="list-style-type:none">
<li>1.项目</li>
<li>2.项目</li>
</ul>
<!-- 表格 -->
<table border="1" style="tr:nth-child(2n){background:orange;}">
<tr>
<th>表格标题</th>
<th>表格标题</th>
</tr>
<tr>
<td>表格数据</td>
<td>表格数据</td>
</tr>
</table>
<!-- 框架:如获取某网页数据 -->
<iframe src="demo_iframe.htm" frameborder="0" name="iframe_a"></iframe><br/>
<a href="#" target="iframe_a">点击切换框架内容</a>
<!-- 布局:使用h5新标签(语义元素)footer,文本© -->
<div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">
版权&nbsp;&#169; xxx.com
</div>
</body>
</html>

 【2.JavaScript】:

1.HTML5新特性:web存储

  • 保存数据:localStorage.setItem(key,value);
  • 读取数据:localStorage.getItem(key);
  • 删除单个数据:localStorage.removeItem(key);
  • 删除所有数据:localStorage.clear();
  • 得到某个索引的key:localStorage.key(index);
//保存数据  
function save(){  
    var site = new Object;
    site.keyname = document.getElementById("keyname").value;//获取表单输入的keyname或userName
    site.sitename = document.getElementById("sitename").value;  
    site.siteurl = document.getElementById("siteurl").value;
    var str = JSON.stringify(site); // 将对象转换为字符串,即{xxx}=>‘{xxx}’
    localStorage.setItem(site.keyname,str);  //【长期保存本地数据到浏览器】
    alert("保存成功");
}  
//查找数据  
function find(){  
    var search_site = document.getElementById("search_site").value;  
    var str = localStorage.getItem(search_site);  //获【取本地数据,免登陆】
    var find_result = document.getElementById("find_result");
    var site = JSON.parse(str);  
    find_result.innerHTML = search_site + "的网站名是:" + site.sitename + ",网址是:" + site.siteurl;  
}
//删除数据   
function del(name) {
  localStorage.removeItem(name);//【注销登陆】
  alert("删除成功!");
  loadAll();
}

 2.JavaScript:cookie存储

  1. 设置(创建/覆盖)cookie 值的函数,如:document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";//key:value+过期时间+cookie路径(当前url)
  2. 获取 cookie 值的函数,如:var x = document.cookie;//返回所有
  3. 删除 cookie 值的函数,如:document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";//value设为空
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<head>
<script>
function setCookie(cname,cvalue,exdays){
    var d = new Date();
    d.setTime(d.getTime()+(exdays*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname){
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
    }
    return "";
}
function checkCookie(){
    var user=getCookie("username");
    if (user!=""){
        alert("欢迎 " + user + " 再次访问");
    }
    else {
        user = prompt("请输入你的名字:","");
          if (user!="" && user!=null){
            setCookie("username",user,30);
        }
    }
}
</script>
</head>
    
<body onload="checkCookie()"></body>
    
</html>

3.事件:常用的6个dom事件

事件描述
onchange HTML 元素改变
onclick 用户点击 HTML 元素
onmouseover 用户在一个HTML元素上移动鼠标
onmouseout 用户从一个HTML元素上移开鼠标
onkeydown 用户按下键盘按键
onload 浏览器已完成页面的加载

【补充】:

(1-UI(用户界面事件):当用户与页面的上的元素交互时发生,但不一定与用户操作有关的事件。

load事件:当页面加载完毕时在qindow上触发,当图像加载完毕时在ing元素上触发,等等,页面完全加载完毕(包括所有图像,js文件,css等外部文件资源)时触发,img只要设置了src就会下载;

unload事件:当页面完全卸载时在window上触发,当一个页面切换到另一个页面时就会触发,经常利用这个事件来清除引用,减少内存的泄露

error:当发生js错误时在window上触发,当图像无法加载时在img上触发
abort事件:当用户停止下载过程时,如果嵌入的内容没有加载完成,则在object元素上触发
select:当用户选择文本框(input或textarea)中的一或多个字符时触发
resize:当窗口或框架的大小发生改变时在window上触发
scroll:当用户滚动带滚动条的元素中的内容时,在该元素上触发

2-焦点事件:当元素获得焦点或失去焦点时触发
blur:失去焦点时触发,这个事件不会冒泡
focus:获得焦点时触发,不冒泡
focusin:在获得焦点时触发,冒泡,DOM3新增
focusout:在失去焦点时触发,冒泡
3-鼠标事件:当用户通过鼠标在页面上执行操作时触发
click:单击事件,用户单机鼠标按钮(一般是左键)或按下回车键时触发
dbclick:双击事件,当双击鼠标时触发(一般是左键)
mousedown:当用户在按下任意鼠标按钮时触发
mouseup:当用户释放鼠标按钮时触发
mouseenter:在鼠标光标从外部首次(是指每次进入元素,并不是只执行一次)时触发,而且这个事件不冒泡,而且在光标移到到后代元素上不会触发(从父区域进入子区域,再从子区域进入父区域是不会触发的,因为他认为子区域也是他的一部分),DOM3定义的
mouseleave:和mouseenter是一对,刚好相反
mousemove:当鼠标指针在元素内部移时重复的触发
mouseout:当鼠标指针位于一个元素上方,然后移到到另一个元素上方时触发,另一个元素可能是外部元素也可能是他的后代元素,因为他不认为后代元素所在的区域是他的一部分
mouseover:和mouseout是一对,恰好相反

除了mouseleave和mouseenter之外都会冒泡
click事件只有触发了mousedown和mouseup之后才会触发,代表click只有触发两次clic才会触发,如果取消了之前的事件将会不触发
鼠标事件都是在浏览器视口中的特定位置发生的,可以通过事件的属性获取到。
视口区(客户区)坐标位置:clientX和clientY可以获取到位置信息。所有浏览器都支持这两个属性,是相对于浏览器的视口而不是页面而言的,不包括地址栏等
页面坐标位置:pageX和pageY,相对于页面而言,ie8及更早版本不支持这两个属性,不过我们可以计算出来
event.clientX + (document.body.scrollLeft + document.documentElement.scrollLeft)
event.clientY + (document.body.scrollTop + document.documentElement.scrollTop)
屏幕坐标位置:相对于整个电脑屏幕,screenX和screenY

4-滚轮事件:当使用鼠标滚轮(或类似事件)时触发
mousewheel:跟踪鼠标滚轮或笔记本触摸板
5-文本事件:当在文档中输入时触发
textinput:在文本显示给用户之前更容易拦截文本,是对keypress的补充
可编辑区输入字符键才可以出发
ie9才支持,firefox不支持
6-键盘事件:当用户通过键盘在页面上执行操作时触发
keydown:用户按下键盘上的任意键时触发,而且按住不放的话,会重复触发此事件
keypress:用户按下键盘上的字符键时触发,而且按住不放的话,会重复触发此事件,按下esc也会触发
keyup:用户释放键盘上的键时触发
所有元素都支持这三个事件

keydown-》keypress-》textinput-》keyup
keyup和keydown的event有个keycoe属性,代表键盘码,与ASCII相对应
7-合成事件:当为IME(input method editor,输入法编辑器)输入字符触发
同时按下几个键才能输入一个字符
8-变动事件:当底层DOM结构发生变化时触发
DOM结构发生变化时触发

9.事件委托:本来该自己做的事情,委托给别人做。
利用的是事件冒泡原理,使用event.target获取触发事件的目标元素。
优点:
1- 提高性能,只需要注册一次事件,也方便移除事件。解决事件处理程序过多的问题,在DOM树中尽量最高的层次上添加一个事件处理程序,只指定一个事件处理程序,就可以管理某一类型的所有事件。
2- 给动态生成的元素添加事件。可以解决动态生成的子元素绑定不上事件的问题。
<button id="test">点我呀</button>
<div id="f" class="f"></div>

var  test =document.getElementById('test');
var  f =document.getElementById('f');
var  i =0;

test.onclick=function() {
varp =document.createElement('p');
p.innerHTML= i++;
f.appendChild(p);
}

f.onclick=function(e) {
console.log(e.target.innerHTML);
}

10.模拟事件
var e = document.createEvent(自定义事件名称)
node.dispatchEvent(e);

 new CustomEvent(事件名,数据):兼容性不好

11.其他:

form有submit事件,表单的提交最好使用submit事件,不使用onclick事件,因为不同的浏览器之间可能存在不同的时差,submit事件和click之间的顺序不同的浏览器之间是不同的表单还有focus事件,blur事件,change事件select的change事件是只有改变了选择项就会发生,而其他表单是在值被修改且失去焦点的时候才会发生:

序列化表单:formData

var data = new formData();
data.append(名,值)

3.Windows方法:

  • window.open() - 打开新窗口
  • window.document.getElementById("header");//document 也是 window 对象的属性之一:
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口的尺寸
  • window.innerHeight - 浏览器窗口的内部高度(包括滚动条)
  • window.innerWidth - 浏览器窗口的内部宽度(包括滚动条)
  • location.hostname 返回 web 主机的域名(如:kp);//可不使用 window 这个前缀
  • location.pathname 返回当前页面的路径和文件名(home/path);
  • location.port 返回 web 主机的端口 (80 或 443);
  • location.protocol 返回所使用的 web 协议(http:// 或 https://);
  • location.href 属性返回当前页面的 URL。
  • location.assign(url) 方法加载新的文档//替换当前原有页面
  • history.back() - 与在浏览器点击后退按钮相同
  • history.forward() - 与在浏览器中点击向前按钮相同
  • alert("sometext");//提示
  • confirm(true);//确认
  • prompt("sometext","defaultvalue");//输入确认
  • setInterval("javascript function",milliseconds);//循环
  • clearInterval(intervalVariable)
  • setTimeout("javascript function", milliseconds);
  • clearTimeout(timeoutVariable)
  • navigator//浏览器信息可被浏览器使用者更改
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
    
<div id="example"></div>
<script>
txt = "<p>浏览器代号: " + navigator.appCodeName + "</p>";
txt+= "<p>浏览器名称: " + navigator.appName + "</p>";
txt+= "<p>浏览器版本: " + navigator.appVersion + "</p>";
txt+= "<p>启用Cookies: " + navigator.cookieEnabled + "</p>";
txt+= "<p>硬件平台: " + navigator.platform + "</p>";
txt+= "<p>用户代理: " + navigator.userAgent + "</p>";
txt+= "<p>用户代理语言: " + navigator.systemLanguage + "</p>";
document.getElementById("example").innerHTML=txt;
</script>

</body>
</html>

 

posted @ 2018-12-25 12:35  桥南小院  阅读(533)  评论(0编辑  收藏  举报