原生js封装运动框架的示例讲解

昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架.

正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装.

首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子

如下代码:

#div{
  width: 100px;
  height: 100px;
  background: gold;
  position: absolute;
  left:0;
  top:0;
  opacity: 1;
}

然后我们就开始写js代码了,如下:

window.onload=function() {

  var oDiv = document.getElementById("div");
  var timer;

写一个函数,方便以后用的时候直接调用就好了,首先先传入几个参(要运动的对象,变动的属性,终点距离,运动总时间,回调函数)----今天的只是简单的封装一下,你也写可以传入一个json

function move(obj,name, target, dur,fn) {
// 总步数=总时间÷计时器设定的时间
  var count = parseInt(dur / 30);
// 起始位置
  var start = parseFloat(setStyle(obj,name));
// 总距离=传入的距离-起始距离
  var dis = target - start;
// 每步运动的距离=总距离÷总步数
  var spen = dis / count;
// 定义起始步数
  var n = 0;
  timer = setInterval(function () {
  n++;
// 把当前运动的位置保存
  var cur=start + n * spen;
// 判断属性是不是透明度,透明度不用加单位
  if(name=='opacity'){
    obj.style[name]=cur;
// 兼容IE低版本,IE的透明度是1到100
    obj.style.filter='alpha('+cur*100+')';
  }else {
    obj.style[name] = start + n * spen + "px";
  }
// 判断运动是否完成
  if (n == count) {
// 完成后清除定时器,停止运动
    clearInterval(timer);
// 判断用户是否传入回调函数
    fn && fn();
  };
 }, 30);
};

然后自己随便写一些调用回调函数,测试一下:

oDiv.onclick=function(){
    move(oDiv,"left",600,1000,function(){
      move(oDiv,'top',400,1000,function(){
        move(oDiv,"width",300,1000,function(){
          move(oDiv,"opacity",0,1000);
        });
      });
    });
  };
// 获取非行间样式
  function setStyle(obj,name){
// 考虑兼容性问题
    if(obj.currentStyle){//不兼容火狐和谷歌
      return obj.currentStyle[name];
    }else{
      return getComputedStyle(obj,false)[name];//不兼容IE
    };
  };
};

好了,今天就先封装到这里了,这只是简单的封装一下,明天我们会改进一下,比如参数太多、参数顺序不能乱的问题,还有多次点击计时器出现的Bug的问题,如果你有好的方法欢迎评论区留言,程序员之间就是要相互学习的,明天见,老铁们!

以上这篇原生js封装运动框架的示例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 原生JS实现风箱式demo,并封装了一个运动框架(实例代码)

    声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的框架. function getStyle(obj,attr) { if(obj.currentStyle){ return obj.currentStyle[attr];//为了获取IE下的属性值 }else{ return window.getComputedStyle(obj,null)[at

  • 原生js封装运动框架的示例讲解

    昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架. 正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装. 首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子 如下代码: #div{ width: 100px; height: 100px; background

  • 原生js封装的ajax方法示例

    本文实例讲述了原生js封装的ajax方法.分享给大家供大家参考,具体如下: 众所周知,框架之间会有冲突,这是源生js就起到作用了,下面介绍一种源生js封装的ajax请求. function ajax(options) { options = options || {}; options.type = (options.type || "GET").toUpperCase(); options.dataType = options.dataType || "json"

  • 原生JS封装animate运动框架的实例

    如下所示: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> div { width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; top: 50px; b

  • 原生JS封装拖动验证滑块的实现代码示例

    前言 星期六闲着没事,就想着写写原生js玩玩,在网上看了几个效果后决定做这个效果,并且使用了prototype和eventEmitter封装成了库. 最终效果 分析 看到这个效果我们首先应该想到和拖动有关的api: onmousedown, onmousemove, onmouseup 其次要支持用户传入放置这个组件的dom元素和完成的回调事件. 最终如何使用? 我们先来看下使用方式,再来决定我们怎么编写这个库 具体使用就是这样的,我们还想用户能通过import等方式使用,所以我们就要支持esM

  • 基于原生JS封装的Modal对话框插件的示例代码

    基于原生JS封装Modal对话框插件,具体内容如下所示: 原生JS封装Modal对话框插件,个人用来学习原理与思想,只有简单的基本框架的实现,可在此基础上添加更多配置项 API配置 //基本语法 let modal = ModalPlugin({ //提示的标题信息 title:'系统提示', //内容模板 字符串 /模板字符串/DOM元素对象 template:null, //自定义按钮信息 buttons:[{ //按钮文字 text:'确定', click(){ //this:当前实例 }

  • 封装运动框架实战左右与上下滑动的焦点轮播图(实例)

    在这篇文章打造通用的匀速运动框架(实例讲解)中,封装了一个匀速运动框架,我们在这个框架的基础之上,加上缓冲运动效果,然后用运动框架来做幻灯片(上下,左右). 缓冲运动通常有两种常见的表现:比如让一个div从0运动到500,一种是事件触发的时候,速度很快, 一种是事件触发的时候慢,然后慢慢加快.我们来实现先块后慢的,常见的就是开车,比如刚从高速路上下来的车,就是120km/小时,然后进入匝道,变成40km/时. 或者40km/小时进入小区,最后停车,变成0km/小时. 从120km/小时->40k

  • 原生js 封装get ,post, delete 请求的实例

    现在的项目中都在用VUE 以及react 等MVC, MVVM  框架. 丢弃了原始的JQ .不可能为了个$.ajax();而把JQ引进来吧. 在vue1的开发中 提供了 vueResouce, vue2 出来后明确提出了不在更新vueResouce 而提供axios 的方法. 在react 的开发中提供fetch 封装的方法.等等.但在工作与后台的交互中基本都是form表单的形式.于是自己封装了个 POST,GET,DELETE 的请求方式.当然根据不同的公司,不同的方式.都可以自己扩展.目前

  • 原生js封装无缝轮播功能

    原生js封装无缝轮播插件,供大家参考,具体内容如下 说明: 这是一个使用原生js.es5语法写出的无缝轮播程序,代码中对相关api进行了封装,使得在引入该轮播js文件后,只需要在自己的js文件中添加两行代码即可在网页中实现一个基本的无缝轮播图效果. 基本使用步骤为:获取dom元素数组.向轮播对象中传参.轮播对象调用自动轮播方法. 除基本的定时器自动轮播功能外,该程序还支持设置过渡动画时间.设置鼠标移入元素自动轮播停止.设置点击左右侧边按钮时轮播.设置点击下方按钮时轮播功能. 该程序不需要依赖cs

  • 原生js封装添加class,删除class的实例

    一.添加class function addClass(ele,cName) { var arr = ele.className.split(' ').concat(cName.split(" ")); for(var i=0;i<arr.length;i++){ for(var k=arr.length-1;k>i;k--){ (arr[k]==="")&&arr.splice(k,1); (arr[i]===arr[k])&&

  • 原生js封装的一些jquery方法(详解)

    用js封装一些常用的jquery方法 记录一下 hasClass:判断是否有class function hasClass(ele, cls) { if (!ele || !cls) return false; if (ele.classList) { return ele.classList.contains(cls); } else { return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); } } addCl

随机推荐