js07进阶

Js07进阶

目录

1.BOM对象(浏览器对象模型) 3

1.1BOM (Browser Object Mode)浏览器对象模型,... 3

1.2 document、location、navigato对象... 3

1.3screen对象:用来获取用户的屏幕信息。... 3

2.Git. 4

2.1历史... 4

2.2Linux指令... 4

3.Git介绍... 5

3.1Git的三类文件... 5

3.2 Git使用... 5

3.2.1 git仓库操作... 5

3.2.3邮箱与用户名的设置... 6

3.2.4恢复历史版本... 6

3.2.5建立信任关系: 6

3.2.6上传代码... 7

3.2.7多人开发... 7

3.2.8小结... 8

3.3主干与分支... 8

3.4Git指令... 9

4.移动端... 10

4.1touch事件... 10

4.2事件对象:(如果想图便捷,可以都使用e.changedTouches获取信息)... 10

4.3点击穿透... 12

4.3.1多页面穿透... 12

4.3.2单页面多元素穿透... 13

4.5过渡与动画(pc与移动端都适用)(css3事件)... 14

5.Zepto. 14

5.1zepto概述... 14

5.2zepto的touch模块... 15

5.3例子:百度地图... 16

1.BOM对象(浏览器对象模型)

1.1BOM (Browser Object Mode)浏览器对象模型,

是Javascript的重要组成部分。 它提供了一系列对象用于与浏览器窗口进行交互,这些对象通常统称为BOM。

window窗口对象。它表示整个浏览器窗口,主要用来操作浏览器窗口。

同时,window对象还是ECMAScript中的Global对象(全局对象),因而所有全局变量和函数都是它(window)的属性,且所有原生的构造函数及其它函数也都存在于它的命名空间下。

1.2 document、location、navigato对象

document对象:是window对象的一个属性,可以用来处理页面文档

location对象:用于获得当前页面的地址(URL),并把浏览器重定向到新的页面

location.herf = 'url地址'

location.hostname返回web主机的域名

location.pathname返回当前页面的路径和文件名

location.port返回web主机的端口(80 或443)

location.portocol返回页面使用的web协议。http:或https:

navigator对象:提供了与浏览器有关的信息。

userAgent是最常用的属性, 用来完成对浏览器的判断。

window.navigator对象在编写时可不使用window这个前缀。

1.3screen对象:用来获取用户的屏幕信息。

Screen对象:

height:获取整个屏幕的高。

width :获取整个屏幕的宽。

availHeight:整个屏幕的高减去系统部件的高(可用的屏幕宽度)

availWidth :整个屏幕的宽减去系统部件的宽(可用的屏幕高度)

history对象:包含浏览器的历史。

back()返回上一页。

forward()返回下一页。

go( "参数" ) -1表示上一页,1表示下一页。

2.Git

2.1历史

很多人都知道, Linus在1991年创建了开源的Linux,从此,Linux系统不断发展, 已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

因为很多开发者不断的贡献代码,这样代码越来越多了,就有了管理代码的问题了,所以Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git! 一个月之内,Linux系统的源码已经由Git管理了!

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站 上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,后来项目越来越多了,其它系统也就开始支持Git了

windows,mac等系统都已经支持了Git

我们要使用git就要安装客户端.

安装完成,提供了控制台

Git Bash为linux家族(unix, mac等)使用的

Git CMD为window使用的

由于git是为linux提供的,所以建议我们使用linux指令

2.2Linux指令

cd                               目录打开目录

ls                                 查看当前目录文件的

pwd                            查看当前目录所在的系统文件路径

mkdir                          文件名名称创建文件夹

touch                          文件名创建文件的

echo内容>>文件     (向文件中写入内容)

cat                              文件查看文件内容

小案例:在D:\class目录下创建一个demo文件夹, 并创建一个file.txt文件, 并写入你好明天

3.Git介绍

3.1Git的三类文件

在git中有三类文件的

第一类文件未纳入缓存的文件(不能被git管理)

这类文件,一旦删除就再也无法找到.

第二类文件是纳入缓存的文件

这类文件,可以通过git找到

第三类文件纳入版本库的文件

这类文件,可以在计算机的各个位置找到

3.2 Git使用

3.2.1 git仓库操作

git init初始化一个git仓库

当执行该命令之后,会出现一个隐藏的.git文件

objects目录用于存储纳入缓存的文件

refs目录用于存储纳入版本库的文件

我们可以通过git执令实现三类文件的切换

git add文件名称

实现将未纳入缓存的文件变为第二类文件(纳入缓存),可以通过*将所有文件纳入缓存

$ git rm directives.txt –-cache  移除缓存

git status查看文件的状态

一旦纳入缓存,就有机会纳入版本库

git rm文件名

版本库中移除文件。

如果添加了--cache,说明是从缓存中移除。

git commit -m“说明”

注意:这个说明一定要有意义

将缓存中的文件,纳入版本库

(版本库会保留当前的状态,文件更新后,版本库不会更新,修改文件后,就得重新缓存,重新添加库版本库)

此时,一旦修改了文件,要通过git status查看一下被修改的是哪个文件

如果想要查看修改的内容,git diff文件

当查看完毕代码没有问题,继续git add,然后git commit -m '说明'

$ git commit -m "add file and index"

3.2.3邮箱与用户名的设置

查看自己的用户名和邮箱地址:

  $ git config user.name

     $ git config user.email

修改自己的用户名和邮箱地址:

       $ git config --global user.name "xxx"

          $ git config --global user.email "xxx"

3.2.4恢复历史版本

回退版本:

我们可以通过git reset --hard HEAD^回退到上一个版本,如果想要恢复到上上一个版本HEAD^^,如果想要回到前100个,如果书写100个^ ^比较容易数不清楚,HEAD~100

回到未来:

我们可以通过git reset --hard HEAD commit id实现

一旦将文件纳入版本库,我们可以通过计算机的各个位置去找到文件,但是一旦计算机换掉了,文件就再也找不到了,所以我们要将文件上传到云端(服务器),这样的话,即使电脑换掉了也可以找到我们想要的文件

3.2.5建立信任关系:

一旦将文件提交到版本库将有机会上传到云端(服务器)

由于你的本地Git仓库和远程仓库之间的传输时通过SSH加密的,所以需要一点设置 :

1.执行指令ssh-keygen -t rsa -C邮箱然后一路回车使用默认值就好

$ ssh-keygen -t rsa -C xxxxxxxx@gmail.com

2.之后进入用户主目录可以找到.ssh目录

(C:/Users/Administrator.USER-20151015SY/.ssh/id_rsa)

Enter file in which to save the key (/c/Users/Administrator.USER-20151015SY/.ssh/id_rsa):

3.打开id_ rsa.pub文件, 复制里面的内容

4.将内容粘贴到gitHub(个人)或者gitlab(企业/付费)上

setting => SSH and GPG keys => add new =>输入标题并粘贴内容

3.2.6上传代码

建立连接:

git remote add origin xxxxxxx@gmail.com:xxxxxx/QAQtest.git

上传代码:

git push -u origin master

预览项目:

http://htmlpreview.github.io/

我们在输入框中输入项目的首页地址,即可预览项目

克隆项目:

git clone 项目地址即可下载别人的项目

3.2.7多人开发

多人开发的时候,要提交代码要做两件事:拉取代码,合并代码

拉取代码git fetch origin master

从远程主机的master分支拉取最新内容

合并代码git merge FETCH_ HEAD

将拉取下来的最新内容合并到当前所在的分支中

这两个操作可以通过pull来简化:

git pull origin master

有重复操作同一行代码时,保留或删除哪行代码,需要自己选择

删除掉不需要的部分(如:下面的为前一个人的版本,我不想要,直接删除即可)

3.2.8小结

-------------------------------单人修改文档后-------------------------------

.先将文件添加到自己本地的缓存(git add xxx.html

.把缓存的文件xxx.html添加到本地的版本库(git commit -m “update index”)注:双引号内写注释,尽量简明

.再次提交到线上库(git push -u origin master

-------------------------------多人开发后续具体操作-------------------------------

.提交到版本库(重复一、二操作)

【五.同步到服务器(git push -u origin master)[如果直接进行这一步会报错]】

.拉取线上代码(git fetch origin master

.合并(前一个人写的)代码(git merge

+ git pull origin master(二合一)

.打开本地代码文件,选择要保留的部分,其余删除

.重复一、二( git commit -m "merge index")、三

3.3主干与分支

分支:不会影响整个项目里面的主线文件:

git分支与主干合并操作

在主干上合并分支:

 (master) git merge branch --squash

在分支上合并主干:

 (branch) git merge master --squash

创建功能分支:

(master) git checkout -b feature

合并最新主干代码

1 (feature) git checkout master

2 (master) git pull

3 (master) git checkout feature

4 (feature) git merge master

5解冲突

6 (feature) git commit #

-------------------------------单人修改文档后-------------------------------

.先将文件添加到自己本地的缓存(git add xxx.html

.把缓存的文件xxx.html添加到本地的版本库(git commit -m “update index”)注:双引号内写注释,尽量简明

.再次提交到线上库(git push -u origin master

-------------------------------多人开发后续具体操作-------------------------------

.提交到版本库(重复一、二操作)

【五.同步到服务器(git push -u origin master)[如果直接进行这一步会报错]】

.拉取线上代码(git fetch origin master

.合并(前一个人写的)代码(git merge

+ git pull origin master(二合一)

.打开本地代码文件,选择要保留的部分,其余删除

.重复一、二( git commit -m "merge index")、三

-------------------------------分支开发具体操作流程-------------------------------

AB同时拉取线上版本库,C在线上版本上拉去分支

A开发完毕,直接提交

B开发完毕的时候,A已经提交了,因此要拉去线上版本库,合并本地版本库再提交

A开发完毕的时候,B已经提交了,因此要拉去线上版本库,合并本地版本库再提交

c单独维护分支,因此直接提交自己的代码,不用拉去代码与合并代码。等到所有功能开发完,再次性的拉去 最新的主干,然后将代码合并,再同步主干。

3.4Git指令

查看分支: git branch

创建分支: git branch <name>

切换分支: git checkout <name>

创建+切换分支: git checkout -b <name>

合并某分支到当前分支: git merge <name>

删除分支: git branch -d <name>

Git pull将远程主机的最新内容拉下来后直接合并可能会出现冲突

4.移动端

4.1touch事件

touch事件

在移动端新增了touch事件,

注意:手指的行为叫做'触摸’, 鼠标的行为叫做‘点击’,

在移动端仍然支持点击事件,但会有200~ 300ms之间的延迟,是为了检测是否是双击

touchstart

该事件会在触摸的时候触发

绑定方式: dom.addEventListener( 'touchstart' , fn)

touchend

该事件会在触摸结束的时候被触发

绑定方式: dom.addEventListener( 'touchend’, fn)

Touchmove(高频事件,类似mousemove)

该事件会在触摸移动的时候触发

绑定方式: dom.addEventListener( 'touchmove' , fn)

touchcancel

当触摸点被中断时会触发touchcancel事件,中断方式有很多种。(模拟器: alt + tab )

绑定方式: dom.addEventListener( 'touchcancel' , fn)

       一旦触发该事件(触摸被取消),touchend将不被执行

4.2事件对象:(如果想图便捷,可以都使用e.changedTouches获取信息)

e.touches

在touchstart和touchmove事件中,指示手指相关信息的属性:

e.changedTouches

在touchend事件中,指示手指相关信息的属性

 /**

         * 移动端

         * 1.首先,当按下手指且未抬起手指时,触发ontouchstart事件

         * 2.手指拿起时,触发ontouchend事件

         * 3.几乎是同时,执行click事件(慢几毫秒或者同时,但依旧是ontouchend事件先执行)

         *      如果手指按了较长时间,click事件则会被取消执行

         *  一旦触发该事件(touchcancel),touchend将不被执行

         * 

         * 在移动端,

         *      我们常用touch事件。click点击有延迟,事件触发的较晚

         * 

         * **/

        //获取时间

        var date = Date.now();

        //帮绑定事件

        box.onclick = function () {

            console.log('click');

        }

        //绑定touch事件

        //开始点击,开始触摸

        box.ontouchstart = function (e) {

            console.log('touch start', e.touches[0].clientX);

            //注意:所有的触摸,都需要注明是第几个触摸点的位置,才能获取到信息

        }

        //触摸结束

        box.ontouchend = function (e) {

            console.log('touch end', e.changedTouches[0].clientX);

        }

        //   touch start 683 //   touch end 763 //   click 764



        //触摸移动//高频事件

        box.ontouchmove = function (e) {

            console.log('ontouchmove', e.touches[0].clientX);

        }

        //touch事件被取消

        box.ontouchcancel = function (e) {

            console.log('ontouchcancel', e.touches);

        }

4.3点击穿透

4.3.1多页面穿透

    /**点击穿透:问题描述

        *问题:

        *    点击浮层关闭按钮时,也点击了页面上对应位置的元素(正常是不应该点击到页面上的对应的元素的)

        *原因:

        *    1.触屏设备为了区分用户双击缩放,对 click 做了 300ms 延迟触发,其在移动端的操作流程为

        *   

        *    2.手指触碰到屏幕时,触发 touchstart , 弹窗隐藏

        *    3.手指按上时,可能会有短暂的停留和轻微的移动,触发 touchmove

        *    4.手指离开屏幕时,触发 touchend

        *    5.等待 300ms 后,看用户在此时间内是否再次触摸屏幕,如果没有

        *    6.300ms 后,此时弹窗已消失,浏览器在用户手指离开的位置触发 click 事件,所以点到了页面上的元素

        *  

        **/

        // child.ontouchstart = function () {

        //     console.log('ontouchstart child');

        //     //希望显示demo页面

        //     location.href = './02.3demo.html'

        // }



        // //解决:

        // //法一:等手弹起来(ontouchend)之后,再切换页面

        // // child.ontouchstart;

        // child.ontouchend = function () {

        //     console.log('ontouchend child');

        //     //希望显示demo页面

        //     location.href = './02.3demo.html'

        // }

        //法二:延迟300ms,保证touch事件触发完成,再切换页面

        child.ontouchstart = function () {

            console.log('ontouchend child');

            //希望显示demo页面

            setTimeout(function () {

                location.href = './02.3.2demo.html'

            }, 300)

        }

4.3.2单页面多元素穿透

 <style>

#child { width: 400px; height: 100px; background-color: pink;}

#box1,#box2{width: 200px;height: 200px; background-color: powderblue;}

#box2 {background-color: purple; }</style>

</head>

<body>

    <div id="child"></div>

    <hr>

    <div id="box1"></div>

    <div id="box2"></div>

    <script>

        //点击蓝色元素,使之消失

        //为box2 绑定click事件

        box2.addEventListener('click', function () {

            console.log('click box2');

        })

        //为box1 绑定 touch事件//隐藏元素

        // box1.addEventListener('touchstart', function () {

        //     box1.style.display = 'none';

        //     //触发了穿透现象:点击该事件且正常触发后,仍然触发了box2点击事件

        //     console.log('touch box1');

        // })

        //解决:和多页面的解决方法相似

        //法一:改touchstart为touchend事件//该方法在当前测试环境不行//改为click可解决

        // box1.addEventListener('click', function () {

        //     box1.style.display = 'none';

        //     //触发了穿透现象:点击该事件且正常触发后,仍然触发了box2点击事件

        //     console.log('touch box1');

        // })

        //法二:延迟300ms触发touchstart事件

        box1.ontouchstart = function () {

            setTimeout(() => {

                box1.style.display = 'none';

            }, 300)

            console.log('ontouchend box1');

        }

    </script>

4.5与动画(pc与移动端都适用)(css3事件)

过渡事件

当一个元素渡开始的时候会触发一个事件: transitionstart事件

在一个元素过渡完成之后会触发一个事件: transitionend事件

动画事件

在一个元素动画开始的时候会触发一个事件: animationstart事件

在一个元素动画结束之后会触发一个事件: animationend事件

正是由于js中可以订阅css3过渡与动画事件,因此就可以在js中捕获css3过渡与动画的状态

5.Zepto

5.1zepto概述

Zepto是一个轻量级的针对现代高级浏览器的JavaScript库,它与jquery有着

类似的api。如果你会用jquery, 那么你也会用zepto。参考网址:

Zepto.js: 轻量且兼容 jQuery API 的 JavaScript 工具库 | Zepto.js 中文网

zepto是分为模块化的,天生不具备animate函数,如果想要使用animate

函数要下载fx模块

    <h1>hello QAQ</h1>

    <script src="./zepto开发版本.js"></script>

    <script src="./fx.js"></script>

    <script>

        //主要应运在移动端

        $('h1').attr('title', '阿伟死了');

        //绑定事件

        $('h1').on('touchstart', function () {

            console.log('click');

        })

        //设置样式

        $('h1').css({

            position: 'absolute',

            top: 0

        })

           /**

         * 添加动画

         *      虽然是在js中调用,但仍使用的是CSS动画

         * **/

        $('h1').animate({

            top: 300

        }, 1000)

5.2zepto的touch模块

如果想要使用移动端的事件要下载touch模块。在touch模块中自定义了一些移动端的事件

tap:触碰                  swipe:滑动

singleTap:单击             swipeLeft:左滑动

longTap:长按                           swipeRight:右滑动

doubleTap:双击                       swipeUp:.上滑动

swipeDown:'下滑动

这些方法可以通过以下方式绑定:

$(dom).on(type, fn)       $(dom).type(fn)

    <div class="box">Hello QAQ</div>

    <script src="./zepto开发版本.js"></script>

    <script src="./fx.js"></script>

    <script src="./touch.js"></script>

    <script>

        $('div.box').css({

            width: 200,

            height: 200,

            background: 'pink'

        })

        //绑定轻拍事件

        $('.box').tap(function () {

            console.log('tap111');

        })

        //通过on订阅

        $('.box').on('tap', function () {

            console.log('tap222');

        })

        //长按(时间是750ms)

        $('.box').longTap(function () {

            console.log('longTap');

        })

        //双拍

        $('.box').doubleTap(function () {

            console.log('doubleTap');

        })

        //单拍

        $('.box').singleTap(function () {

            console.log('singleTap');

        })

        //滑动

        $('.box').swipe(function () {

            console.log('swipe');

        })

        //左滑

        $('.box').swipeLeft(function () {

            console.log('swipeLeft');

        })

5.3例子:百度地图

假如在工作中,突然有一天领导过来交代一个任务,在一个页面中显示出地图并且要在地图中显示自己公司的位置,现成的地图都有:高德地图、百度地图、谷歌地图、腾讯地图

假如要显示百度地图,我们要找到百度地图API:

1进入百度地图官网,注册账号

2申请ak密钥

3在页面中弓|入百度地图脚本文件

4使用百度地图API 

​
 <script type="text/javascript" src= " https://api.map.baidu.com/api?v=3.0&ak=此处输入密钥"> </script>

 

​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值