22-29学习总结

  • URL
    统一资源定位符(Uniform Resource Locator,URL)是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL 的一般语法结构为:

porotocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=andy&age=18#link
  • 组成 说明
    protocol 通信协议,常用的http、ftp、maito等
    host 主机(域名)
    port 端口号,可选,省略时使用默认断开,如http的默认端口80
    path 路径,由零或多个“/”格开的字符串,一般用来表示主机上的一个目录或者文件地址
    query 参数,以键值对的形式,通过符号 & 分割开来
    fragment 片段,# 后面的内容常见于链接,锚点
    location 对象的属性
    location 对象属性 返回值
    location.href 获取或者设置整个 URL
    location.host 返回主机(域名)
    location.port 返回端口号,如果未写返回空字符串
    location.pathname 返回路径
    location.search 返回参数
    location.hash 返回片段,# 后面内容,常见于链接、锚点
    5秒钟之后自动跳转页面
    案例分析:

利用定时器做倒计时效果
location.href 跳转页面

  <div>将在5秒钟之后跳转到首页!</div>
    <script>
        setTimeout(function() {
            location.href = 'http://www.baidu.com';
        }, 5000);
    </script>
  • 获取 URL 参数数据
    主要练习数据在不同页面之间的传递

案例分析:

第一个登陆页面,里面有提交表单,action 提交到 index.html 页面
第二个页面可以使用第一个页面的参数,利用了 location.search 参数
截取字符串用 substr
分隔符,将 = 前后的分隔开
login.html :

<form action="index.html">
    <input type="text" name="username" id="">
    <input type="submit" value="登录">
</form>

index.html :

<div></div>
<script>
    // substr(起始位置, 截取几个字符)
    var params = location.search.substr(1);
    var arr = params.split('=');
    var div = document.querySelector('div');
    div.innerHTML = '欢迎您!会员' + arr[1] + '!';
</script>

location 常见方法
location 对象方法 返回值
location.assign() 跟 href 一样,可以跳转页面
location.replace() 替换当前页面,因为不记录历史,所以不能后退页面
location.reload() 重新加载页面,相当于刷新按钮或者 F5,如果参数为true,强制刷新 ctrl + F5

  • navigator 对象
    navigator对象包含有关浏览器的信息,它有很多属性,我们最常用的是userAgent,该属性可以返回由客户机发送服务器的useragent头部的值。

  • history 对象
    window对象给我们提供了一个history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL。

  • history 对象方法 作用
    back() 后退功能
    forward() 前进功能
    go(参数) 前进后退功能,参数如果是1,前进一个页面,如果是-1,后退一个页面
    history 对象在一般的实际开发中比较少用,但是会在一些 OA 办公系统中见到。

  • offset概述
    offset翻译过来就是偏移量,使用offset的相关属性可以动态的获取元素的偏移、大小等

获得元素距离带有定位父元素的位置
获得该元素自身的大小(高宽)
注意:返回的数值都不带单位
offset系列常用属性:

offset系列属性 作用
element.offsetParent 返回该元素带有定位的父级元素,如果父级都没有定位则返回body
element.offsetTop 返回元素相对带有定位父元素上方的偏移
element.offsetLeft 返回元素相对带有定位父元素上方的偏移
element.offsetWidth 返回自身包括padding、border、内容区的宽度
element.offsetHeight 返回自身包括padding、border、内容区的高度

  • offset和style的区别

offset style
可以等到任意样式表中的样式值 只能得到行内样式表的样式值
得到的值没有单位 得到的值都有单位
得到的值是包括padding+border+width 得到的值不包含padding和border的值
是只读属性,只能获得值,不能赋予值 是可读写属性,可以获取值,也能赋予值
更合适用来获取元素值 更适合用来给元素赋值

  • 案列—模态拖拽框

下面介绍一个简单案列的实现,如下图:
在这里插入图片描述

代码如下

html:

<h1>点击,弹出登陆框</h1>
<div class="login">
    <h3>登录会员</h3>
    <form action="">
        <label for="">用户名: </label><input type="text" placeholder="请输入用户名"><br>
        <label for="">登录密码:</label><input type="password" placeholder="请输入登陆密码">
        <button>关闭</button>
    </form>
</div>

css:

body {
            position: relative;
            background: #ccc
        }
        h1{
            margin:5px auto;
            width: 300px;
            font-weight: normal;
            z-index: 0
        }
        h3 {
            cursor: move;
        }
        .login {
            width: 500px;
            height: 200px;
            background: #fff;
            text-align: center;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,50%);
            display: none;//开始是隐藏的
        }
        .login input {
            width: 200px;
            line-height: 20px;
            padding-left: 5px;
            margin-bottom: 10px;
            outline: none;
        }
        .login input[type=text]{
            margin-right: -14px
        }
        button {
            width: 40px;
            height: 40px;
            position: absolute;
            background: #fff;
            border-radius: 50%;
            border: none;
            top: -20px;
            right: -20px;
            outline: none;
            cursor: pointer;
        }

js:

var alert = document.querySelector('h1');
        //获取元素
        var login = document.querySelector('.login');
        var btn = document.querySelector('button');
        var mdown =document.querySelector('h3');
        alert.addEventListener('click', function(){
            login.style.display = 'block';
        });
        btn.addEventListener('click',function(){
            login.display.block = 'none';
        });

  

  mdown.addEventListener('mousedown', function(e){
        var x = e.pageX - login.offsetLeft;
        var y = e.pageY - login.offsetTop;
        document.addEventListener('mousemove',move);
        function move(e){
            var px = e.pageX - x;
            var py = e.pageY - y;
            login.style.left = px  + 'px';
            login.style.top = py +'px';
        }
        document.addEventListener('mouseup',function(){
            document.removeEventListener('mousemove',move);
        });
    });
  • 案例分析:

1.点击弹出层,会弹出模态框

2.点击关闭按钮,可以关闭模态框

3.鼠标放在最上面一行可以按住鼠标拖拽模态框在页面移动

4.鼠标松开,可以停止拖动模态框移动

  • 实现分析:

1.点击弹出层后模态框会显示出来display:block;

alert.addEventListener(‘click’, function(){
login.style.display = ‘block’;
});//给弹出层添加点击监听器,点击之后使模态框的display:none转变为display:block;

2.点击关闭按钮之后,可以关闭模态框display:none;

btn.addEventListener(‘click’,function(){
login.display.block = ‘none’;
});//给关闭按钮添加点击监听器,点击之后使模态框的display:block转变为display:none;

3.在页面中拖拽的原理:鼠标按下并且移动,之后松开鼠标,拖拽框停止移动

4.鼠标按下mousedown,鼠标移动mousemove,鼠标松开mouseup

5.鼠标按下过程:就是按住最上面哪一行h3标签,然后给他添加mousedown监听器事件

mdown.addEventListener(‘mousedown’, function(e){//给拖拽行添加监听器
var x = e.pageX - login.offsetLeft;//鼠标到拖拽框的左端距离
var y = e.pageY - login.offsetTop;//鼠标到拖拽框上端距离
document.addEventListener(‘mousemove’,move);//当按住鼠标之后就进行移动
function move(e){
var px = e.pageX - x;//拖拽框到浏览器左边的距离
var py = e.pageY - y;//拖拽框到浏览器上面的而距离
login.style.left = px + ‘px’;//拖拽框到浏览器左边的距离赋值给login的left值
login.style.top = py +‘px’;//将拖拽框到浏览器上面的距离赋值给login的login值
}
document.addEventListener(‘mouseup’,function(){//松开鼠标之后,移出move事件
document.removeEventListener(‘mousemove’,move);
});
});

5.鼠标移动过程:在按住的监听器下再添加一个移动的监听器事件,并动态的获取拖拽框的左端和上端距离浏览器的距离,在赋值给login的left和top;实现拖拽移动的效果

6.鼠标松开过程:添加鼠标松开事件,松开事件的时候,添加移除move事件,这时就可以实现模态框拖拽了。

  • 动画的原理
    动画移动的原理:1.获得元素当前位置;2.每隔一定时间元素位置 加 1;2.使用定时器重复元素位置加1的过程;4.达到目的地时动画停止,动画停止的核心是停止定时器。

动画的核心:是定时器

元素移动,就是元素的偏移量在变化,而且这个变化是有时间限制的,在一定的时间里做出移动的效果。所以移动的核心就是使用定时器实现元素位置的变化。

  • 动画函数的封装
    animation函数,两个参数,一个是目标对象,一个是目标位置

在封装时,还有两个问题需要解决。

第一:如果是点击触发动画时,连续点击多次,元素移动的速度会变快;这是因为每点击一次,元素就触发一次定时器,多个定时器同时作用的效果。为了让元素每次调用函数,只保留当前一个定时器,需要在动画函数的第一行先把定时器清除。这样,无论点击多少次,元素的移动的速度都是不变的。

第二:为了使不同的对象调用不同的动画也就是调用不同的定时器,我们在给定时器命名时,使用对象的属性存储定时器。

  • 动画的回调函数

动画的回调函数:就是在动画的效果完成之后,再执行的函数叫回调函数。

回调函数是在动画函数的第三个参数。

注意:动画的回调函数是写在定时器停止的位置。

callback的实质:就是把函数作为一个参数传给另一个函数 《====》 callback = function(){}

  • 缓动动画

缓动动画的本质就是元素在平移的时候,每次位移量增加的不同,从而实现移动速度的不同,就有移动的速度快慢的效果了。

这里有一个步长的概念,步长公式:步长 = (目标位置 - 当前位置 )/ 10; 这里的10不是定值,可以自己调整。

缓动动画的原理就是在上一个知识点的基础上,把那个每隔一段时间增加的定值1 换位变化的步长实现的。

步长的计算很容易出现小数,这样就会跟实际效果不符合,所以我们需要取整。步长有正有负,代表向前走还是向后退,取整也不同。

步长为正数时:我们向上取整 Math.ceil()

步长为负数时:我们向下取整 Math.floor()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值