使用的场景:移动前端
1、安卓手机物理返回键
2、苹果手机在企业微信打开浏览器的返回按钮
移动前端开发语言是:vue
路由跳转:vue-router hash模式
先介绍一下html5中history有哪些属性和API,我们用到了其中2个方法(pushState、replaceState),来根据状态存储的数据判断是否触发返回事件
1、window.history.length - 历史记录长度
2、window.history.state - 历史记录状态
3、window.history.go(num) - 回到指定的历史记录(参数num可以是正/负)
4、window.history.back() - 回到上一个历史记录
5、window.history.forward() - 回到下一个历史记录(前提当前历史记录不是最新的)
6、window.history.pushState(state, title, newUrl) - 新增一个历史记录(路径等于当前的url + newUrl )
7、window.history.replaceState(state, title, newUrl) - 替换当前的历史记录路径(路径等于当前的url + newUrl )
监听事件:window.onpopstate
pushState和replaceState作用演示:
打开当前页面路径如下(D:/webstorm_workspace/demo-code/eventListenerBack/test.html),历史记录长度1
点击pushState按钮:创建了一条新的历史记录(新建状态)、历史记录长度2
pushState按钮的代码如下:
// pushState会新建一条历史记录 pushState = () => { let state = {'name': '张三 - pushState'} window.history.pushState(state, null, '?pushState') console.log('pushState') console.log(window.history.state) }
点击replaceState按钮:替换当前的历史记录(更新状态),历史记录长度2
replaceState按钮的代码如下:
// replaceState会覆盖当前的历史记录 replaceState = () => { let state = {'name': '张三 - replaceState'} window.history.replaceState(state, null, '?replaceState') console.log('replaceState') console.log(window.history.state) }
监听事件演示
点击返回按钮:会触发监听事件window.onpopstate方法;之前的路径是(D:/webstorm_workspace/demo-code/eventListenerBack/test.html?replaceState),返回到(D:/webstorm_workspace/demo-code/eventListenerBack/test.html)
返回按钮的代码如下:
// 返回按钮监听 window.onpopstate = (e) => { console.log('触发onpopstate方法') console.log(historyState) // 判断前一个历史记录存储的state数据来确定是否需要改变当前的数据 }
总结
1、什么时候会触发这个监听事件?除了back方法,go和forward方法也可以触发
2、前进后退历史记录需要根据条件判断时,需要绑定监听事件
vue-router模式:https://www.cnblogs.com/xufeimei/p/10745353.html
演示代码:https://github.com/github-gmm/demo-code/blob/master/eventListenerBack/test.html
return语句用于终止一个函数的执行,同时将一个返回值返回给这个函数的调用者。因此,return语句必须要被包含在函数之中;否则,程序就会出错。如果没有为return语句指明它的返回值,那么它就默认返回undefined。
如果一个函数中没有显式的写明return语句,那么在函数执行时JavaScript会在该函数执行流程的末尾自动添加一条未指明返回值的return语句。return语句也可以被添加在函数的前面部分,这通常用于当满足某个条件时而提前退出函数。
return语句的语法结构如下所示:
return [expression];
其中expression可以是JavaScript中任意合法的表达式,它的计算结果就是return语句的返回值,在函数终止的时候会被返回给该函数的调用者。如果省略了expression,那么return语句的返回值就默认为undefined。
如果要显式指明expression,那么它和return关键字必须写在同一行上,即它们之间不能有换行符。否则,JavaScript会自动在return关键字的后面添加分号。此时,该return语句其实是一个未指明返回值的return语句,而expression在return语句之后永远都不会被执行到。
<script>
// 定义一个函数,计算一个数的两倍
function twice(x) {
var result = x * 2;
return result;
}
// 调用该函数,并打印返回值
var value1 = twice(9);
console.log("value1 = " + value1);
</script>
以上代码的执行结果如下图所示。我们用实参9调用函数twice(),它先计算9的两倍然后再返回该结果,随后该返回值被赋值给了变量value1。第10行的代码打印出value1的值,可以看到它的值确实为18。
该示例中的twice()函数还可以简写为下面的形式,即计算两倍的表达式被包含在return语句中,它的结果被直接返回。这样就不需要先声明一个变量临时保存计算结果,再用return语句返回该变量。
<script>
// 和上面代码中的twice函数完全等价
function twice(x) {
return x * 2;
}
</script>
<script>
// 定义一个函数,它的最后是一条没有指明返回值的return语句
function abc() {
console.log("执行函数abc().");
return;
}
// 调用该函数,并打印返回值
var value2 = abc();
console.log("value2 = " + value2);
</script>
从下图的执行结果中我们可以看到,首先打印出了字符串"执行函数abc().",说明函数abc()确实被执行了。第10行的代码打印出的变量value2的值为undefined,这正是return语句的默认返回值。
<script>
// 定义一个函数,它省略了return语句
function abc() {
console.log("执行函数abc().");
}
// 调用该函数,并打印返回值
var value3 = abc();
console.log("value3 = " + value3);
</script>
下图中的执行结果表明,该示例和上一个例子的执行结果完全一致(除了变量被命名为value3之外)。该例子的成功执行表明,当一个函数的执行流程的最后一条语句是没有显式指定返回值的return语句时,该return语句可以被省略。
当一个函数的执行流程的最后缺少return语句的时候,JavaScript会自动在该执行流程的最后添加一条没有返回值的return语句,当然该函数的返回值就为undefined了。
<script>
// return 语句在函数之外:这会导致程序出错
return;
console.log("青石野草");
</script>
以上代码的执行结果如下图所示,我们可以看到浏览器明确指出第3行的return语句是错误的。
return语句不一定非要是函数的最后一条语句,它也可以处于函数的前面或中间,用于提前终止函数的执行。示例代码如下所示:
<script>
// 定义一个函数,它计算一个数的相反数;
// 当参数为0时,它会被提前终止
function opposite(x) {
if(x == 0) {
console.log("0的相反数是它自身。");
return 0;
}
console.log("不为0的数的相反数是它的负数。");
return -x;
}
// 调用函数,并打印返回值
var value4 = opposite(0);
console.log("value4 = " + value4);
</script>
我们使用实参0调用函数opposite(),当实参为0的时候,会执行if语句中的代码。它首先打印字符串"0的相反数是它自身。",然后遇到语句return 0;。这条return语句提前终止函数的执行,并返回0。因此,if语句后面的那一条打印语句和return -x;均不会被执行。下图中的执行结果正印证了这一执行流程。
这个例子也说明了一个函数可以包含多个return语句,用于根据不同的情况而退出函数。
<script>
// 定义一个函数,它和第一个例子中的函数几乎一样;
// 只是原本的return语句被拆分成了两行。
function twice(x) {
var result = x * 2;
return
result;
}
// 调用函数,并打印返回值
var value5 = twice(9);
console.log("value5 = " + value5);
</script>
该示例的执行结果如下图所示,可以看到第11行打印出的变量value5的值为undefined,而不是我们原本期望的数字18。这是怎么回事呢?
这个示例和第一个例子唯一的不同就是我们把return语句拆成了两行,return关键字和它的返回值result被写在了不同的行上。在其它编程语言或者JavaScript的某些其它语句中,这样的拆行不会对原程序有任何影响。
但JavaScript的return语句是个例外,在本文的开头我们就说过如果return关键字和它的返回值之间有换行符的话,JavaScript会自动在return关键字之后插入一个分号,此时该return语句的意义就和我们所期望的不同了。
这样自动插入分号的结果就会让该示例中的twice()函数实际等同于下面的代码。此时无论传递的参数是多少,return语句都会提前终止函数并默认返回undefined,而变量result始终都不会被返回。
<script>
// 定义一个函数,它和第一个例子中的函数几乎一样;
// 只是原本的return语句被拆分成了两行。
function twice(x) {
var result = x * 2;
return; // 注意,这个分号是JavaScript自动插入的;它改变了程序的语义。
result;
}
</script>
如果你真的想要将return语句写在多行上,那么你可以将返回值用括号括起来。但请一定要注意,此时左括号也必须要和return关键字写在同一行上,就像下面的代码这样:
<script>
/* 要将return语句写在多行上,可以用括号将返回值括起来;
* 但是,左括号也必须要和return关键字写在同一行上。
*/
function twice(x) {
return (
x * 2
);
}
</script>
(完)
Low了,网页居然还用这么老掉牙的特效!弄个粗体字,下划线就是突出重点了?真是一股浓浓的乡村风扑面而来;弄个图在页面飘来飘去就是动画效果了,你要这么认为的话那我只能保持沉默了。在HTML5占领着整个互联网之时,想透过网页抓住所有人的眼球,因循守旧是行不通的。因此,有你不能不知道的HTML常用代码。只有熟悉掌握了常用的HTML代码,你才能在编写网页的时候做到行云流水,用处处流露着细腻和创意的动效细节打动所有人。
在这里还是要说一下我自己建的前端JavaScript学习交流群:574462090,不管你是小白还是大牛,小编我都挺欢迎,小白嘛,多问点问题也就学好了,不定期分享干货,包括最新的2017年前端学习资料,欢迎初学和进阶中的小伙伴。
html代码大全:结构性定义
文件类型<HTML></HTML> (放在档案的开头与结尾)
文件主题<TITLE></TITLE> (必须放在「文头」区块内)
文头<HEAD></HEAD> (描述性资料,像是「主题」)
文体<BODY></BODY> (文件本体)
标题<H?></H?> (从1到6,有六层选择)
标题的对齐 <H?ALIGN=LEFT|CENTER|RIGHT></H?>
区分<DIV></DIV>
区分的对齐 <DIVALIGN=LEFT|RIGHT|CENTER|JUSTIFY></DIV>
引文区块<BLOCKQUOTE></BLOCKQUOTE> (通常会内缩)
强调<EM></EM> (通常会以斜体显示)
特别强调<STRONG></STRONG> (通常会以加粗显示)
引文<CITE></CITE> (通常会以斜体显示)
码<CODE></CODE> (显示原始码之用)
样本<SAMP></SAMP>
键盘输入<KBD></KBD>
变数<VAR></VAR>
定义<DFN></DFN> (有些浏览器不提供)
地址 <ADDRESS></ADDRESS>
大字<BIG></BIG>
小字<SMALL></SMALL>
与外观相关的标签(作者自订的表现方式)
加粗<B></B>
斜体<I></I>
底线<U></U> (尚有些浏览器不提供)
删除线<S></S> (尚有些浏览器不提供)
下标<SUB></SUB>
上标<SUP></SUP>
打字机体<TT></TT> (用单空格字型显示)
预定格式<PRE></PRE> (保留文件中空格的大小)
预定格式的宽度<PRE WIDTH=?></PRE>(以字元计算)
向中看齐<CENTER></CENTER> (文字与图片都可以)
闪耀<BLINK></BLINK> (有史以来最被嘲弄的标签)
字体大小 <FONTSIZE=?></FONT>(从1到7)
改变字体大小 <FONTSIZE=+|-?></FONT>
基本字体大小 <BASEFONTSIZE=?> (从1到7; 内定为3)
字体颜色 <FONTCOLOR="#$$"></FONT>($$为颜色代码)
2
html代码大全:修改页面的实用性HTML代码
1)贴图:<img src="图片地址">
2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a>
3)在新窗口打开连接:<a href="相关地址" target="_blank">写上要写的字</a>
4)移动字体(走马灯):<marquee>写上你想写的字</marquee>
5)字体加粗:<b>写上你想写的字</b>
6)字体斜体:<i>写上你想写的字</i>
7)字体下划线: <u>写上你想写的字</u>
8)字体删除线: <s>写上你想写的字</s>
9)字体加大: <big>写上你想写的字</big>
10)字体控制大小:<h1>写上你想写的字</h1> (其中字体大小可从h1-h5,h1最大,h5最小)
11)更改字体颜色:<font color="#value">写上你想写的字</font>(其中value值在000000与ffffff(16位进制)之间
12)消除连接的下划线:<a href="相关地址" style="text-decoration:none">写上你想写的字</a>
13)贴音乐:<embed src="音乐地址" width="宽度" height="高度" autostart=false>
14)贴flash: <embed src="flash地址" width="宽度" height="高度">
15)贴影视文件:<img dynsrc="文件地址" width="宽度" height="高度" start=mouseover>
16)换行:<br>
17)段落:<p>段落</p>
18)原始文字样式:<pre>正文</pre>
19)换帖子背景:<body background="背景图片地址">
20)固定帖子背景不随滚动条滚动:<body background="背景图片地址" body
bgproperties=fixed>
21)定制帖子背景颜色:<body bgcolor="#value">(value值见10)
22)帖子背景音乐:<bgsound="背景音乐地址" loop=infinite>
23)贴网页:<iframe. src="相关地址" width="宽度" height="高度"></iframe>
3
html代码大全:常常会遇到的问题
点击关闭窗口
<a href="javascript.:top.window.close();">点击关闭窗口</a>!
请问如何去掉主页右面的滚动条?
<body scroll="no">
<body style="overflow-y:hidden">
如何做到让一个网页自动关闭.
<html>
<head>
<OBJECT id=closes type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="Close">
</object>
</head>
<body >
这个窗口会在10秒过后自动关闭,而且不会出现提示. </body>
如何在不刷新页面的情况下刷新css?
<style>
button{ color:#000000;}
</style>
<button nclick=document.styleSheets[0].rules[0].style.color=‘‘‘‘red‘‘‘‘>点击按钮直接修改style标签里button选择符使按钮改为 红色</button>
请问如何让网页自动刷新?
在head部记入<META. HTTP-EQUIV="Refresh" c>其中20为20秒后自动刷新,你可以更改为任意值。
如何让页面自动刷新?
方法一,用refresh
HTML 代码片段如下:
<head>
<meta. http-equiv="refresh" c>
</head>
5表示刷新时间
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
方法二,使用setTimeout控制
<img src=/logo.gif>
<script>
function rl(){
document.location.reload()
}
setTimeout(rl,2000)
</SCRIPT>
如何让超链接没有下划线
在源代码中的<HEAD>…</HEAD>之间输入如下代码:
<style. type="text/css"> <!--
a { text-decoration: none}
--> </style>
请问如何去掉IE的上下滚动条?
<body style=‘‘‘‘overflow:scroll;overflow-y:hidden‘‘‘‘>
</body>
怎样才能把RealPlayer文件在网页做一个试听连接?
<embed height=25 src=51js.rm type=audio/x-pn-realaudio-plugin width=50 autostart="false" c>
如何用html实现浏览器上后退按钮的功能?
<a href="java script.:history.go(-1)">点击后退</a>
或者
<script> history.back() </SCRIPT>
4
html代码大全:你不一定知道的技巧
16. ncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table borderncontextmenu=return(false)><td>no</table> 可用于Table
17. <body nselectstart="return false"> 取消选取、防止复制
18.onpaste="return false" 不准粘贴
19.oncopy="return false;" ncut="return false;" 防止复制
20. <link rel="Shortcut Icon"href="favicon.ico"> IE地址栏前换成自己的图标
21. <link rel="Bookmark"href="favicon.ico"> 可以在收藏夹中显示出你的图标
22. <inputstyle="ime-mode:disabled"> 关闭输入法
23. 永远都会带着框架
<script. language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>
24. 防止被人frame.
<SCRIPT. LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
25. 网页将不能被另存为
<noscript><iframe.src=*.html></iframe></noscript>
26. 查看网页源代码
<input type=button value=查看网页源代码
onclick="window.location = "view-source:"+"http://www.pconline.com.cn"">
27.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp? &areyou=删除&page=1"">删除</a>
28.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!");//可以换成ALT CTRL
}
document.onkeydown=look;
</script>
29. 网页不会被缓存
<META. HTTP-EQUIV="pragma" CONTENT="no-cache">
<META. HTTP-EQUIV="Cache-Control"CONTENT="no-cache, must-revalidate">
<META. HTTP-EQUIV="expires"CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META. HTTP-EQUIV="expires"CONTENT="0">
30.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">
或 <input type=text style="border-left:none;border-right:none; border -top:none; border-bottom: 1 solid#000000"></textarea>
31.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>
32.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#"nFocus="this.blur()"><img src="logo.jpg"border=0></a>
33.电子邮件处理提交表单
<form. name="form1"method="post" action="mailt****@***.com"enctype="text/plain">
<input type=submit>
</form>
34.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()
35.如何设定打开页面的大小
<body nload="top.resizeTo(300,200);">
打开页面的位置<bodynload="top.moveBy(300,200);">
36.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>
37. 检查一段字符串是否全由数字组成
<script. language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
38. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight
39. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");
40.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27npropertychange="this.style.posHeight=this.scrollHeight">
</textarea>
41. 日期减去天数等于第二个日期
<script. language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() +1) + "月" + a.getDate() + "日")
} cc("12/23/2002",2)
</script>
42. 选择了哪一个Radio
<HTML><script. language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio"value="style" checked>Style.
<INPUT name="radio1" type="radio"value="barcode">Barcode
<INPUT type="button" value="check"nclick="checkme()">
</BODY></HTML>
43.脚本永不出错
<SCRIPT. LANGUAGE="JavaScript">
<!-- Hide function killErrors(){return true;} window.onerror = killErrors;// -->
</SCRIPT>
44.ENTER键可以让光标移到下一个输入框
<input nkeydown="if(event.keyCode==13)event.keyCode=9">
文末再提两点建议吧:
刚学前端JavaScript的时候,一定不要追求速成,编程不比其他传统行业,可以快速的上手,他需要一定的代码量积累起来,不然你追求速成很可能会车毁人亡。
这个文章到这里就说完了,想要前端学习资料的进我的群自助领取,已经上传到群文件里了:574462090,欢迎初学和进阶中的小伙伴。
*请认真填写需求信息,我们会在24小时内与您取得联系。