运动框架

一、函数------单物体运动框架封装

1、基于时间的运动原理

动画时间进程

动画距离进程

图解:

物体从0移动到400

当物体移动到200的时候 走了50%

同样的,物体总共运行需要4秒

如果已经过了2.5秒,也表示走了50%

2、动画时间进程

运动公式: s= 总距离(最终的位置 -- 起始位置)X动画时间进程

代码实现:

 function move(){
/*计算现在的时间*/
var pass = +new Date();
var yongshi = pass - now;
/*动画时间进程 = 用时/总时间*/
var tween = yongshi/5000
/*s = 总距离X进程*/
div.style.left = 500*tween +'px'; }

3、封装成小函数

计算tween(动画时间进程)

 //  我们封装成一个函数  复习函数的封装性
function getTween(now,pass,all){
var yongshi = pass-now;
console.log(yongshi)
var jincheng =yongshi/all;
return jincheng;
}

4、停止 --单一功能原则

基础理解:就是一个函数尽量保证只有一个功能

本质:保证一个函数只有一个变化源

封装变化点

单属性运动

 /*单个属性运动公式*/
/*起始距离+总距离X动画时间进程*/
function oneProperty(dom,name,start,juli,tween){
dom.style[name]= (start+juli*tween)+'px'
}

二、全局变量污染

解决全局变量变量污染问题

使用函数  在函数中定义私有变量(定义子函数)

闭包

对象

立即函数+闭包

1、解决问题 - 使用内嵌函数方式封装框架

  //  time 表示动画持续总时间 juli表示动画走的总距离
// 封装的最后效果是这个整体不依赖外面的任何变量,如果需要外界提供数据,
// 应该以参数的形式,整个框架只是针对参数进行编程
function animate(id,time,juli) {
//将一个物体在n秒内从0移动到juli
var now = +new Date();
var pass= +new Date();//初始化为当前时间
var tween=0 //初始化为0 表示动画进度为0 还没有开始
var timer;
timer = setInterval(move,30); //封装动画时间进程
function getTween(now,pass,all){
var yongshi = pass-now;
console.log(yongshi)
var jincheng =yongshi/all;
return jincheng;
} /*停止*/
function stop(){
clearInterval(timer);
} /*单个属性运动公式*/
/*起始距离+总距离X动画时间进程*/
function oneProperty(id,name,start,juli,tween){
$$.css(id,name,(start+juli*tween)+'px')
/*dom.style[name]= (start+juli*tween)+'px'*/
} // 每次循环执行的代码
function move() {
//动画停止的条件
if(tween>=1) {
stop()
}else {
pass = +new Date();
tween = getTween(now,pass,5000)
oneProperty('div','left',0,400,tween)
}
}
}

2、多属性运动框架

规划入口

 var json = {top:'300px',width:'300px',height:600};

3、适配器

 /*设计模式 -- 适配器*/
function adapter(source){
/*给我的数据格式*/
/*var json = {top:'300px',width:'300px',height:600};*/
/*我需要的数据格式*/ /* 计算一个属性:id name 起始距离 总距离 tween*/
/*juli:最终位置 ---起始位置*/
/* start:$$.css('left')*/
/*parseFloat($$.css('left'))*/
/*juli:300 - start*/ var styles=[]
/* var styles=[
{name:'top',start:0,juli:0},
{name:'width',start:0,juli:0},
{name:'height',start:0,juli:0}]
*/
for(var item in source){
var style ={}
/*属性名称*/
style.name = item;
/*起始位置*/
style.start = parseFloat($$.css(id,item))
/*距离 = 起始位置 -- 初始位置*/
style.juli = parseFloat(source[item]) - style.start
styles.push(style)
}
return styles
}

4、透明度问题

 function oneProperty(id,name,start,juli,tween){
if(name == 'opacity') {
$$.css(id, name, start+juli*tween);
}
else {
$$.css(id, name, start+juli*tween+'px');
}
}

第209天:jQuery运动框架封装(二)的更多相关文章

  1. selenium之多线程启动grid分布式测试框架封装(二)

    五.domain类创建 在domain包中创建类:RemoteLanchInfo.java 用来保存启动信息. package com.lingfeng.domain; public class Re ...

  2. openresty 前端开发轻量级MVC框架封装二(渲染篇)

    这一章主要介绍怎么使用模板,进行后端渲染,主要用到了lua-resty-template这个库,直接下载下来,放到lualib里面就行了,推荐第三方库,已经框架都放到lualib目录里面,lua目录放 ...

  3. javascript运动框架(二)

    紧接着上面写的... 给div加一个边框,border:1px solid black window.onload = function(){      var div = document.getE ...

  4. 【JavaScript框架封装】使用原生js封装的类似于JQuery的框架及核心源码分享(多文件版本)

    这个版本的JQuery是对上一个版本的JQuery,使用了require.js进行了二次封装,基本上把前面的每一个框架封装成为一个单独的模块,最终的目录结构如下: 由于代码量和目录比较多,这个封装好的 ...

  5. 【JavaScript框架封装】自己动手封装一个涵盖JQuery基本功能的框架及核心源码分享(单文件版本)

    整个封装过程及阅读JQuery源码的过程基本上持续了一个月吧,最终实现了一个大概30%的JQuery功能的框架版本,但是里面涉及的知识点也是非常多的,总共的代码加上相关的注释大概在3000行左右吧,但 ...

  6. 对jquery的ajax进行二次封装

    第一种方法: $(function(){ /** * ajax封装 * url 发送请求的地址 * data 发送到服务器的数据,数组存储,如:{"username": " ...

  7. 第61天:json遍历和封装运动框架(多个属性)

    一.json 遍历  for in  关键字  for ( 变量 in  对象)  { 执行语句;  } 例如: var json = {width:200,height:300,left:50}co ...

  8. JS运动框架的封装过程(一)

    给大家出一道题,从起点A走到目的地B,一共用了1000毫秒,每一次是30毫秒,请问你在这里面得到了哪些信息? 信息有哪些呢? 第一个,总时长是:1000毫秒 第二个,多久时间走一次?30毫秒 第三个, ...

  9. [js高手之路]封装运动框架实战左右与上下滑动的焦点轮播图

    在这篇文章[js高手之路]打造通用的匀速运动框架中,封装了一个匀速运动框架,我们在这个框架的基础之上,加上缓冲运动效果,然后用运动框架来做幻灯片(上下,左右),效果如下: 1 2 3 4 5 // 0 ...

随机推荐

  1. 实验四android开发基础

    实验四android开发基础 提交点一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd) ...

  2. 20155209 2016-2017-2 《Java程序设计》第十周学习总结

    20155209 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络,是指分布在不同地理区域的计算机用通信线路互连起来的一个具有强大功能的网络系统.网 ...

  3. 第三次预作业20155231邵煜楠:虚拟机上的Linux学习

    java第三次预作业--虚拟机初体验(学习记录) 学习在笔记本上安装Linux操作系统 通过老师给予的官网链接,下载了VirtualBox-5.1.14-112924-win和Ubuntu-16.04 ...

  4. WPF 任务栏颜色 - 简书

    原文:WPF 任务栏颜色 - 简书 先看看效果,这种效果可以用来做进度条或者消息通知闪烁.   image.png   image.png   image.png   image.png 有一个好消息 ...

  5. WPF 一个简单的颜色选择器

    原文:WPF 一个简单的颜色选择器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/8340999 ...

  6. 没有执行过rm -rf /*的开发不是好运维

    没有执行过rm -rf /*的开发不是好运维 起因 突然收到用户反馈说网站在手机端打开是白屏, 很奇怪的问题. 在电脑端试了下,确实也是白屏,HTML加载进来了,好像有个核心JS加载失败. 看到一个错 ...

  7. 基于MapReduce的(用户、物品、内容)的协同过滤推荐算法

    1.基于用户的协同过滤推荐算法 利用相似度矩阵*评分矩阵得到推荐列表 已经推荐过的置零 2.基于物品的协同过滤推荐算法 3.基于内容的推荐 算法思想:给用户推荐和他们之前喜欢的物品在内容上相似的物品 ...

  8. 【Jmeter测试】BeanShell介绍和使用

      BeanShell是什么? BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言: BeanShell是用Jav ...

  9. MySQL☞大结局

    emmm,看了这么多大概会用了点点,学到了一点点 select  列名/*/聚合函数 from  表名1 别名1  连接查询(左外.右外等等) 表名2 别名2 on 关联条件 where 查询条件 g ...

  10. 韦大仙--LoadRunner压力测试:详细操作流程

    一. 录制脚本 1.安装完毕后,创建脚本: 点击OK之后,会弹出网址,之后创建Action,每进一个页面添加一个Action,录制结束后,终止录制. 二. 修改脚本 1.脚本参数化 将登录的用户名密码 ...