1、百度/高德地图: 1、聊着玩玩:定位技术有哪些? 1、GPS - 美国(卫星定位):1、缴纳版权费用 2、安全性低 2、北斗 - 中国自主:最初并不是民用,而是军用,使用的是惯性定位(定位并不精准) 后期发展为了民用,添加了卫星定位了(更精确了) 物联网、车联网... 3、基站定位 - 信号的范围发射,可以检测到你现在的信号属于哪个范围。 4、IP定位 - 在网不要乱说话,乱造谣,要坐牢。
2、网站的定位技术都是使用的GPS,而并不需要我们学习如何使用GPS,我们有现成:百度/高德地图
3、开发者如何使用:
1、打开百度:搜索百度地图开放平台
2、注册、登录百度账号
3、拉到最下面、点击立即注册成为开发者
4、进入控制台
5、应用管理->我的应用->创建应用->实名认证->获得密钥(AK)
、 6、鼠标移动到导航条->放到开发文档上->web开发->JavaScript API->示例DEMO 7、挑选出你喜欢的地图,然后复制全部代码(HTML/CSS/JS),到你需要的位置 8、查询经纬度:api.map.baidu.com/lbsapi/getp… 9、百度地图你看上的每一个都可以混搭在一起,但是一定要注意版本:普通版(老) 和 webGL(新),是不可以混搭的
2、匿名函数:没有名字的函数,有两种用法 1、自调:只能执行一次,好处:函数中的没用的变量是会自动释放的,他可以用于代替全局代码写法,两者很相似:都只会执行一次,但是自调会释放 (function(){ console.log(1); })();
2、回调:匿名函数不是自调,就是回调
elem.on事件名=function(){}
arr.sort(function(){})
var obj={
"方法名":function(){}
}
一切的回调函数,都可以简化为箭头函数
3、设计模式:不仅仅局限于前端,它是一种编程思想,越来越复杂,对于我们前端人员要求也越来越高了。 如果你对设计模式有兴趣,可以了解一下21种设计模式
1、单例模式:也称之为单体模式,保证一个类仅有一个实例对象,并且提供一个访问它的全局访问点,为三阶段的vue,new Vue();
举例:一个班级只有一个班主任,只有一个太阳,一个国家只有一个主席,"唯一" "便于访问(全局访问的)",行为对象变成做单例
如何实现:
最简单的单例模式:利用ES6的let不允许重复声明的特性,刚好就符合了单例的特点
let obj={
"name":"袍哥1",
"getName":()=>this.name,
}
不太推荐这种写法:
1、污染命名空间(容易变量名冲突)
2、维护时不容易管控(搞不好就直接覆盖了)
推荐写法:
var h52301=(function(){
let state=null;
return function(name,age){
this.name=name;
this.age=age;
if(state){
return state;
}
return state=this;
}
})();
h52301.prototype.sayHello=function(){
console.log(this.name);
}
var llc=new h52301("兰林传",18);
var yxw=new h52301("因性温",19);
console.log(llc);
console.log(yxw);
console.log(yxw==llc);
llc.sayHello();
yxw.sayHello();
何时使用:我们的页面只有一个弹出框
2、发布订阅模式 :为三阶段vue的bus总线用到的底层原理就是我们的发布订阅模式
let obj={};
//创建订阅者
function on(id,fn){
if(!obj[id]){//判断有没有此id(有没有这个人),没有我就创建了一个空数组
obj[id]=[];
}
obj[id].push(fn);
}
on("老袍",(msg)=>{console.log("小兰来了",msg)});
on("老袍",(msg)=>{console.log("小尹来了",msg)});
on("老袍",(msg)=>{console.log("小张来了",msg)});
on("老袍",(msg)=>{console.log("小李来了",msg)});
on("老袍",(msg)=>{console.log("小赵来了",msg)});
console.log(obj);//{"老袍":[fn,fn,fn,fn,fn]}
//发布者的操作
function emit(id,msg){
obj[id].forEach(fn=>fn(msg));//obj["老袍"].forEach
}
btn.onclick=()=>{
emit("老袍","一支穿云箭");
}
4、事件轮询:js其实是单线程引用,代码必然是从上向下,一步一步的执行,如果某一块代码非常耗时,可能会导致整个页面卡住,尤其如果你把js放在head之中,会看到页面是一个白板 1、宏任务:不会再卡住我们的单线程应用,可以让后续代码先走,我们慢慢跟着来,但是问题在于,多个宏任务同时存在,到底谁先执行谁后执行,分不清 1、定时器:setInterval和setTimeout 2、Ajax
2、微任务:ES6提供的Promise对象 - 可以控制异步代码,依然是异步代码,但是可以控制执行的顺序了
function ajax1(resolve){
setTimeout(()=>{
console.log(1);
resolve();
},Math.random()*5000);
}
function ajax2(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log(2);
resolve();
},Math.random()*5000);
})
}
function ajax3(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log(3);
resolve();
},Math.random()*5000);
})
}
new Promise(ajax1).then(ajax2).then(ajax3);//promise的回调函数提供了一个形参函数,可以用于放行
console.log("后续代码");
作业: 1、试着玩玩百度地图,然后混搭使用 2、以后所有的代码,写之前先写一个自调,把所有代码都放进去 3、设计模式的两种,哪怕你把我的案例抄一遍,理解一遍就可以 4、控制多个定时器的执行顺序
5、二阶段有两套练手项目:
咖啡设计图,4月30号之前提交