js(Dom+Bom)第七天(2)

webAPI

01-动画封装

  1. 应用到的知识点

    • 点击事件

    • 给元素设置一个绝对定位

    • 定时器(setInterval)

  2. 封装动画1的步骤:

    • 让元素设置为绝定位
    • 设置元素的开始位置(从哪开始移动)
    • 设置元素的目标位置(移动到哪)
    • 设置元素每次移动的距离
    • 设置元素每次移动的时间间隔(越短越好)
  3. 封装动画1遇到的问题

    • 如果快速的点击按钮,动画会有一个加速的效果

      原因: 多次点击按钮的时候,在程序中相当于开启了多个定时器导致的
      
    • 如何解决?

      解决途径: 不管点击多次按钮,始终只有一个定时器
      
    • 解决问题的核心步骤

      1.var timeID = null; 设置为一个全局的公共变量2. 判断是否存在,如果存在就停住定时器,然后子在开启新的定时器(排他思想)
      //先判断程序中是否有定时器
      if(timeID != null) {//代表已经存在定时器, 立即将存在的定时器删除掉clearInterval(timeID);timeID = null;
      }
      
  4. 将动画2封装成一个函数,方便以后调用

    这个函数有5个参数:
    哪个元素设置动画,
    元素的开始位置
    元素的结束位置
    元素每次移动的距离
    元素每次移动的时间间隔function animation(element, current, target, step, time) {//先判断程序中是否有定时器if(timeID != null) {//代表已经存在定时器, 立即将存在的定时器删除掉clearInterval(timeID);timeID = null;}timeID = setInterval(function(){//开始移动元素的位置if(current >= target) {current = target;clearInterval(timeID);}else {current += step;}//设置box的位置element.style.left = current + 'px';}, time);
    }
    
  5. 如果将动画封装成一个函数后,每次点击都是从开始的位置 0 重新执行程序

    • 怎么解决?

      让元素的 current 值 始终 和 元素实际移动后的位置保持一致
      
    • 在解决方案中有什么问题?

      如何获取当前元素的位置?
      DOM.offsetLeft ----> 左侧的距离位置
      DOM.offsetTop ----> 上边的距离current = 当前元素的位置;
      
    • 最后的解决方案

      在函数中设置:current = element.offsetLeft;
      
  6. 为什么当页面中出现多个元素的时候,动画只能让最后一个元素执行动画?

    • 为什么?

      点击按钮的时候, 程序中共用了一个定时器导致的
      
    • 怎么解决

      每一个元素(对象)应该对应一个定时器在每一个timeID绑定一个对象function animation(element, current, target, step, time) {//让curren 值始终和当前元素的位置保持一致current = element.offsetLeft;//先判断程序中是否有定时器if(element.timeID != null) {//代表已经存在定时器, 立即将存在的定时器删除掉clearInterval(element.timeID);element.timeID = null;}element.timeID = setInterval(function(){//开始移动元素的位置if(current >= target) {current = target;clearInterval(element.timeID);}else {current += step;}//设置box的位置element.style.left = current + 'px';}, time);
      }
      
  7. 为什么元素从右向左移动的时候没有动画效果了?

    • 为什么?

      我们在程序中原来只是简单的判断 开始位置和结束位置 值的大小,而现在 向左移动的时候,开始位置的值就是比目标位置的值要大,所以动画就停止了条件判断写的有问题:if(current >= target) {current = target;clearInterval(element.timeID);}
      
    • 怎么解决?

      应该是求两点之间的距离 和 每次移动的距离比较大小1.在确定当前位置是否移动到了终点位置(目标位置), 要通过计算两点之间的距离实现
      if(Math.abs(target - current) <= Math.abs(step)) {current = target;clearInterval(element.timeID);
      }else {current += step;
      }2.当元素向左移动的时候,保证每次移动的距离  step 是一个负数(向左移动为负)//开始移动元素的位置
      if(current > target) {// 设置为负数step = -Math.abs(step);
      }
      
  8. 动画的最后一个问题,动画没有执行完,又可以执行另外一个动画

    设置一个标志位(节流阀)
    

02-BOM中获取元素的信息

  • 难点在哪?

    这个知识点容易和前面鼠标位置信息混淆
    
  • 复习获取鼠标位置信息

    • 怎么获取鼠标位置信息?

      通过事件对象参数获取
      
    • 获取鼠标的坐标信息

      • 事件对象参数.clientX [获取鼠标的横坐标, 相对可视区域的]
      • 事件对象参数.pageX [获取鼠标的横坐标, 相对整个页面,包括滚动条出去的位置]
      • 事件对象参数.screenX [获取鼠标的横坐标, 相对整个屏幕]
      • 事件对象参数.offsetX [获取鼠标的横坐标, 相对当前事件源]
  • 获取页面中元素的相关信息

    • offset系列的

      • DOM.offsetLeft : 获取元素在网页中的位置信息
      • DOM.offsetTop : 获取元素在网页中的位置信息
      • DOM.offsetWidth : 获取元素的宽度 ( 内容区域 + 边框 + 内边距 )
      • DOM.offsetHeight: 获取元素的高度 (内容区域 + 边框 + 内边距)
    • client系列

      • DOM.clientLeft : 元素左边框的宽度
      • DOM.clientTop : 元素上边框宽度
      • DOM.clientWidth: 元素的宽度(内容器区域 + 内边距)
      • DOM.clientHeight: 元素的高度(内容器区域 + 内边距)
    • scroll系列

      • DOM.scrollLeft : 元素内容区域滚动出去的距离(水平距离) [注册一个滚动的事件 onscroll]

      • DOM.scrollTop: 元素内容区域滚动出去的距离(垂直距离) [注册一个滚动的事件 onscroll]

        //注册一个滚动事件
        div.onscroll = function() {console.log(this.scrollTop);
        }
        
      • DOM.scrollWidth : 元素元素宽度(超出盒子宽度 + 左padding)

      • DOM.scrollHeight: 元素元素高度(超出盒子高度 + 上下padding)

03-拖拽案例

  • 鼠标按下时候的事件

    onmousedown
    
  • 鼠标抬起时候的事件

    onmouseup
    

问题:

  1. 改变元素的位置:
    • 相对定位
    • 绝对定位(有一个参照元素 + 脱标)
    • 固定定位
    • margin
    • padding
    • 2d位移
    • 3d位移
  2. offsetleft
    • 就是用来保存元素位置信息的
    • 不能设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表中环的入口结点

题目描述 给一个链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;输出null。 分析 第一步&#xff1a;确定一个链表中是否有环 我们可以用两个指针来解决&#xff0c;定义两个指针&#xff0c;同时从链表的头结点触发&#xf…

java 线程之线程状态

Thread 类中的线程状态&#xff1a; public enum State {NEW,//新建RUNNABLE,// 执行态BLOCKED, //等待锁&#xff08;在获取锁的池子里&#xff09;WAITING,//等待状态TIMED_WAITING,//定时等待TERMINATED; //终止 } 创建状态&#xff08;NEW&#xff09;&#xff1a;当一个线…

目标元素拖动

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系统原理之内存管理(第四章第二部分)

一、基本分页存储管理方式 1、分⻚存储管理的基本原理&#xff1a; 页&#xff1a;将⼀个进程的逻辑地址空间分成若⼲个⼤⼩相等的⽚页框&#xff1a;将物理内存空间分成与⻚⼤⼩相同的若⼲个存储块分⻚存储&#xff1a;将进程中的若⼲⻚分别装⼊多个可以不相邻的⻚框中页内碎片…

C#代码总结02---使用泛型来获取Asp前台页面全部控件,并进行属性修改

该方法&#xff1a;主要用于对前台页面的不同类型&#xff08;TextBox、DropDownList、等&#xff09;或全部控件进行批量操作&#xff0c;用于批量修改其属性&#xff08;如&#xff0c;Text、Enable&#xff09;。 private void GetControlList<T>(ControlCollection c…

d3.js 教程 模仿echarts柱状图

由于最近工作不是很忙&#xff0c;隧由把之前的charts项目用d3.js重写的一下&#xff0c;其实d3.js文档很多&#xff0c;但是入门不是很难&#xff0c;可是想真的能做一个完成的&#xff0c;交互良好的图还是要下一番功夫的。今天在echarts找到了一个柱状图&#xff0c;如图。 …

简单的动画函数封装(2)

<div></div><!-- <span></span> --><button class"btn1">点击500</button><button class"btn2">点击800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …

【蔡勒公式 】根据给定的年月日求出对应星期几

蔡勒公式 蔡勒&#xff08;Zeller&#xff09;公式&#xff0c;是一个计算星期的公式&#xff0c;随便给一个日期&#xff0c;就能用这个公式推算出是星期几。时间复杂度&#xff1a;O(1)。具体的在红书P229有。 若要计算的日期是在1582年10月4日或之前&#xff0c;公式则为&am…

MFC的程序,不想显示窗口,任务栏里也不显示

在dialog的oninitdialog里设置如下属性&#xff0c;很简单&#xff0c;网上一些乱七八糟的做法&#xff0c;一行代码就能搞定啊 SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW); ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 转载于:https://www.cnblog…

放大镜制作(2)—此方法比较容易理解

<div class"box" id"box"><!--左侧的盒子--><div class"left_img"><!--图片--><img src"images/small.jpg" class"aaa" alt"小图片"/><!--黄色小盒子--><div class"…

call / apply / bind

对于 call / apply / bind 来说&#xff0c;他们的首要目的是用于改变执行上下文的 this 指针。 call / apply 对 call / apply 的使用&#xff0c;一般都如下&#xff0c;用于改变执行环境的上下文。只是 call 接受的是一个一个的参数&#xff0c;而 apply 则是接受的是一个参…

js(Dom+Bom)第八天—Swiper(插件)

Swiper插件(库) 01-基本介绍 Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架&#xff0c;使用硬件加速过渡&#xff08;如果该设备支持的话&#xff09;。主要使用于移动端的网站、移动web apps&#xff0c;native apps和hybrid apps。主要是为IOS而设计的&#xff…

第七节:EF Core调用SQL语句和存储过程

一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段。 B. 结果集中的列名必须与属性映射到的列名相匹配。 C. SQL查询不能包含关联数据 D. 除Select以为的其它SQL语句无法运行。 2.调用SQL语句的几种情况 A. 基本的原生SQL查询 B. 利用$内插语法进行传递 C. 原生…

没用的一些水货

1. 不递归的子函数加上inline会跑的很快。 2. 在稠密图中用dijkstra堆优化会导致跑的很慢。 3. 连着开几个数组的话&#xff0c;有可能越界了评测机却返回WA。 4. 如果你用的Dev-C&#xff0c;那么有的时候会出现一些莫名其妙的编译错误。请检查是否存在未关闭的代码生成的.exe…

js(Dom+Bom)第八天

JavaScript 移动端事件介绍 touch事件类型 移动设备上无法使用鼠标&#xff0c;当手指按下屏幕的时候会触发 click,mousedown,mouseup事件&#xff0c;但是在移动设备上有专门的事件&#xff1a; touch 备注&#xff1a; 在移动端touch事件需要通过事件监听的方式添加touchsta…

程序员计算器HEX、EDC、OCT等等的意思

binary 二进制 对应的是 BINoctal 八进制的 ---- OCThexadecimal 十六进制的 --- HEXdecimal 十进制的 -- DEC 转载于:https://www.cnblogs.com/132818Creator/p/11459984.html

为什么mysql 5.7.24启停不显示错误信息?log-error_verbosity参数

关键词&#xff1a;log-error_verbosity &#xff0c;mysql启停没有信息&#xff0c;mysql启停不显示错误信息&#xff0c;mysql不显示启停信息 原因就是因为 log-error_verbosity 2 被设置成了1/2&#xff0c;需要设置成3才行。 转载自&#xff1a;https://www.cnblogs.com/k…

ASP.NET Core 3.0中使用动态控制器路由

原文&#xff1a;Dynamic controller routing in ASP.NET Core 3.0 作者&#xff1a;Filip W 译文&#xff1a;https://www.cnblogs.com/lwqlun/p/11461657.html 译者&#xff1a;Lamond Lu 译者注 今天在网上看到了这篇关于ASP.NET Core动态路由的文章&#xff0c;感觉蛮有意思…

Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet

一个地图上有若干障碍&#xff0c;问允许出现一个障碍的最大子矩形为多大&#xff1f; 最大子矩形改编 #include<bits/stdc.h> using namespace std; #define rep(i, j, k) for (int i int(j); i < int(k); i) #define dwn(i, j, k) for (int i int(j); i > int…