前端笔记之JavaScript(十二)缓冲公式&检测设备&Data日期
一、JavaScript缓冲公式ease
原生JS没有自己的缓冲公式,但是你要自己推理的话,必须要懂一些数学和物理公式:
让div用100毫秒(帧),从left100px的位置变化到left800px的位置,要求匀速:
大致计算如下:
|
毫秒编号(帧) |
距离起点的增量 |
目前绝对的位置 |
|
0 |
0 |
100 |
|
1 |
7 |
107 |
|
2 |
14 |
114 |
|
... |
... |
... |
|
t |
t*c/d |
b+t*c/d |
|
49 |
343 |
443 |
|
50 |
350 |
450 |
|
98 |
686 |
786 |
|
99 |
693 |
793 |
|
100 |
700 |
800 |
t是时间增量,b为100,c为700,d为100
|
t : 当前时间(current time) b :初始值(begining value) c :变化量(change in value) d :持续时间(总步数)(duration) |
首先b、c、d三个参数(初始值、变化量、持续时间)在运动开始前,是需要确定好的。
举例:
div要向右缓动,left初始值100,那么b就是100,要向右移动700,那么c就是700,至于d的设置就比较灵活,只要符合t是从0向d递增或递减就可以了
d根步骤配合使用来设置持续时间,例如d设置为100,如果设置步长是1,那么从0到100就有100步,即分100次完成这个过程,步数越多那么持续时间就越长。

|
2次:=100+A2*A2*700/(100*100) 3次:=100+A2*A2*A2*700/(100*100*100) 正弦1次: =100+SIN(A2/20)*700/SIN(100/20) 正弦2次:=100+SIN(A2/20)*SIN(A2/20)*700/(SIN(100/20)*SIN(100/20)) |
var oDiv = document.getElementsByTagName('div');
var f = 0;
var timer = setInterval(function(){
f++;
if(f >= 100){
clearInterval(timer);
}
oDiv[0].style.left = linear(f,100,700,100) + "px";
oDiv[1].style.left = ease_2(f,100,700,100) + "px";
oDiv[2].style.left = ease_3(f,100,700,100) + "px";
oDiv[3].style.left = ease_sin(f,100,700,100) + "px";
oDiv[4].style.left = ease_sin2(f,100,700,100) + "px";
},20);
// 推理出的匀速公式
function linear(t,b,c,d){
return b + t * c / d;
}
function ease_2(t,b,c,d){
return b + t * t * c / (d * d);
}
function ease_3(t,b,c,d){
return b + t * t * t * c / (d * d * d);
}
function ease_sin(t,b,c,d){
return b + Math.sin(t/20) * c / Math.sin(d/20);
}
function ease_sin2(t,b,c,d){
return b + Math.sin(t/20)*Math.sin(t/20) * c / (Math.sin(d/20)*Math.sin(d/20));
}
二、检测设备跳转
if(/(iPhone|iPad)/i.test(navigator.userAgent)){
//如果当前设备是手持设备,就跳转到以下网址
window.location.href = 'https://m.taobao.com/';
}else if(/(Android)/i.test(navigator.userAgent)){
window.location.href = 'https://m.baidu.com/';
}
三、Date日期对象
Date() 方法可返回当天的日期和时间
|
Date() 返回当日的日期和时间。 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getMonth() 从 Date 对象返回月份 (0 ~ 11)。 getFullYear() 从 Date 对象以四位数字返回年份。 getHours() 返回 Date 对象的小时 (0 ~ 23)。 getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。 getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。 getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。 getTime() 返回 1970 年 1 月 1 日至今的毫秒数。 |
JavaScript基础就到这里了,后续一些知识点我们在面向对象再见面吧,如果有哪些知识点遗漏了,请联系我补充谢谢。
前端笔记之JavaScript(十二)缓冲公式&检测设备&Data日期的更多相关文章
- 前端笔记之JavaScript(二)关于运算符&初识条件判断语句
运算符 数学运算符的正统,number和number的数学运算,结果是number.出于面试的考虑,有一些奇奇怪怪的数学运算: 数学运算中:只有纯字符串.布尔值.null能够进行隐式转换. //隐式转 ...
- 从头开始学JavaScript (十二)——Array类型
原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader) 代码工 ...
- WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...
- JavaScript DOM编程艺术-学习笔记(第十二章)
第十二章 1.本章是综合前面章节的所有东西的,一个综合实例 2.流程:①项目简介:a.获取原始资料(包括文本.图片.音视频等) b.站点结构(文件目录结构) c.页面(文件)结构 ②设计(切图) ③c ...
- Linux内核设计与实现 总结笔记(第十二章)内存管理
内核里的内存分配不像其他地方分配内存那么容易,内核的内存分配不能简单便捷的使用,分配机制也不能太复杂. 一.页 内核把页作为内存管理的基本单位,尽管处理器最小寻址坑是是字或者字节.但是内存管理单元MM ...
- 《深入理解java虚拟机》读书笔记十一——第十二章
第十二章 Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...
- 前端笔记之JavaScript(十)深入JavaScript节点&DOM&事件
一.DOM JavaScript语言核心.变量的定义.变量的类型.运算符.表达式.函数.if语句.for循环.算法等等.这些东西都属于语言核心,下次继续学习语言核心就是面向对象了.JavaScript ...
随机推荐
- VMware workstation pro 15 安装Ubuntu(图文教程)
今天分享一下虚拟机安装Ubuntu的过程,在开始安装之前,需要下载VMware workstation pro和Ubuntu镜像,两者我都用的最新版,由于VMware workstation pro ...
- 动态规划——Dungeon Game
这又是个题干很搞笑的题目:恶魔把公主囚禁在魔宫的右下角,骑士从魔宫的左上角开始穿越整个魔宫到右下角拯救公主,为了以最快速度拯救公主,骑士每次只能向下或者向右移动一个房间, 每个房间内都有一个整数值,负 ...
- vmware虚机 修改bios方法
.vmx文件添加以下行,会在下次启动时自动出现bios,并会将"TRUE"改为“false” bios.forceSetupOnce = "TRUE"
- 快速安装puppeteer (跳过安装Chromium)
npm i --save puppeteer --ignore-scripts
- iptv
# -*- coding: utf-8 -*- import datetime, time, json, re, os #from pwd import getpwnam #quality str_q ...
- 分享几个有意思的css js工具网站
一.VOCABS(css html术语) vocabs 适合初学者快速认知各个代码的术语. 二.OverAPI(语言参考手册,几乎包含所有语言) OverAPI 适合快速查阅相关语言api 三.Jav ...
- Docker安装及基本操作
系统环境 CentOS Linux release 7.5.1804 (Core) 安装依赖包 更新系统软件 yum update 安装docker yum install docker 启动dock ...
- Summer Project
Summer Project Summer是一个用于学习交流,基于Netty4.x的简单mvc库. 使用 快速开始 public class Application { public static v ...
- Rewrite JSON with Fetch
1.重写json请求部分:HTML文件代码如下:<html>......<script> var myList = document.querySelector(‘ul‘); ...
- 用Group by分组后,取每组的前3条记录,怎么取?
使用子查询进行查询 SELECT * FROM home_content a WHERE ( SELECT count(id) FROM home_content WHERE class_link = ...