JSON转数组

1
2
3
4
5
//将JSON转化为数组
Object.values({a: {b:1}, b: 2}) //[{b: 1}, 2]

//获取JSON的所有key
Object.key({a: {b:1}, b: 2}) //['a', 'b']

ios history.back 页面不会刷新问题

苹果手机访问网页在返回操作时不会刷新页面重新加载,而是去加载cache,这样会速度更快,但是有些时候我们还是需要重新加载数据的。

这里我们可以通过判断 onpageshowpersisted 状态来确定是否reload页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
//js写法
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload();
}
};

//jquery写法
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
window.location.reload();
}
});

递归算法在组织架构的应用

在解决一些复杂问题的时候,我们需要复杂的算法,最近做组织架构就需要用递归的算法,对此总结一下组织架构对递归算法的应用。

首先我们看一下什么是递归算法,说简单点就是函数自己调用自己,对于递归,我们需要有个明确的退出条件,不然就成死循环了。

但是网上也有提到递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡用递归算法设计程序。不过个人感觉,在解决组织架构这块递归还是很方便的。

好了不多说了,关于实际问题,我们直接看代码。

history之学习联想

1.history.back()
通过这个方法我们可以像点击浏览器的返回按钮,实现页面的返回。
2.history.forward()
通过这个方法我们可以如果点击浏览器的前进按钮。
3.history.go()
跳转到session历史中的一个页面。

1
2
3
history.go(1); //向前一页
history.go(-1); //向后一页
//通过传入参数可以前进退后多页(session中的历史页面)

4.history.pushState()
pushState可以传入三个参数,第一个参数为state对象,第二个参数为标题(试了好像不管用),第三个参数为跳转的url。

state可以让我们存储一些json对象的值,我们可以在history.state中获取到值。
url可以传入一个相对路径,会在当前的路径下加上传入的url:

1
2
3
//路径为http://localhost:3000
history.pushState({name: 'moneyinto'}, '页面标题', '#another');
//之后的路径为http://localhost:3000/#another

微信公众号开发遇到的问题一

问题一:video脱离文档流

在微信里嵌入视频播放,我想大家都会想到html5的video标签,嵌入一个视频播放,很简单,但是在微信中,video标签会被微信进行修改,微信的x5浏览器不支持html5的标准格式
微信为什么要这样做了,在微信中的视频播放完后都会插入广告。要做公众号这点只能任由微信这样做了。
但是这样也就算了,微信开发中video都会脱离文档流,浮动到整个页面的最上层,特别当播放完后,这个video都不受控制了,上下滑动页面,视频会上下抖动,会遮住别的标签内容。

关于这个问题的解决方案,目前我想到的有两种:

  1. 接腾讯视频API,这样会很好的兼容x5内核浏览器;
  2. 当页面滚动重写video(很扯淡的解法,但是没办法,有时还是很好用)。

安卓学习之activity生命周期

每个Activity实例都有其生命周期。在生命周期内,Activity在运行、暂停、停止三种可见的状态间进行切换。

首先我们查看一下activity的生命周期图。
我们可以查看google的官方文档提供的API,学会查看API对我们的学习很有帮助。

  • 我们都下载了配置了android-sdk,我们打开sdk的下载环境,可以在里面找到API文档Documentation for Android SDK进行下载,下载完后可以在sdk的docs文件下打开index.html,这样我们就可以找到API文档,查找activity的讲解。
  • 我们也可以直接进入android的官网,找到开发者资源,查看API,找到Activity的讲解。

web布局方式小结

对于前端布局的方式,总结了一下,我自己常用的有这么几个:

1.最常用的就是float:left

float:left直接这样用的话,外层的div是没有高度的,这样要自己设置高度,不然下面的内容会插到它的下面,就像下面的效果一下,绿色块插到红色块下面去了。

但是添加高度的方式实现不是很好,不一定每次布局都是写死高度的,这时我们只要用一下css的clear:bothdisplay:table就可以很好的解决这个问题了。我们直接看代码和效果更直观些。

js数组对象克隆

数组和对象都会有指向问题。

1
2
3
4
5
6
7
8
9
var a = [1,2,3];
var b = [1,2,3];
a==b; //false
//这时a和b都是指向不同的数组,所以a和b不等

var a = [1,2,3];
var b = a;
a==b; //true
//这时a和b都指向同一个数组,所以a和b相等,这里不要理解为a指向数组,b指向a,其实他们都是直接指向数组的。

如果a和b都指向同一个数组或对象,当我们改变其中一个的值时,就会使得另外一个变量的值也跟着变了。

1
2
3
4
var a = [1,2,3];
var b = a;
b.pop();
a; //[1,2]

【注】数组是引用传值,数组的push(),pop(),splice()都会改变修改数组,但是concat()和slice()不会,所以这里说道简单的克隆数组,就可以用这两个方法实现。

angular指令学习

指令,简单的说就是一个在DOM上运行的函数,对元素进行扩展。
关于指令的方法directive()接受两个参数,name和function,下面我们来看一下指令长啥样:

1
2
3
4
5
6
7
angular.module('myApp',[])
.directive('myDirective', function(){
//一个指令定义对象
return {
//这里来写指令,和一些配置值
}
})