分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

简单模拟jQuery创建对象的方法,以及封装一个js动画框架

发布时间:2023-09-06 01:47责任编辑:彭小芳关键词:jsjQuery动画

今天无事点开了N年未点开的慕课网,看了一个js动画框架的视频,心血来潮用jQuery的方法封装了一下,虽然不如jQuery,但是还是有点点所获。

什么都不说,直接上代码:

/** * 这是框架的唯一对象,使用jQuery框架的创建方法 * @class MyAnimation * @constructor ?*/function MyAnimation(Selector){//返回MyAnimation原型链中init()方法创建的对象return new MyAnimation.prototype.init(Selector); }/** * 这是对象的初始化方法 * @method init * @param {string} Selector 选择对象 ?* @return ?*/function init(Selector){ ?var el = null; ?var identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+"; ?var match = {"all": new RegExp( "^\\.(" + identifier + ")" ) ?}; ??//匹配 ?if(match["all"].exec(Selector) != null){ ?el = document.querySelectorAll(Selector); ?}else{ ?el = document.querySelector(Selector); ?} /** ?*实现css样式的改变 ?* @method changeStyle ?* @for MyAnimation ?* @param {Object} obj 元素对象(带timer) ????* @param {json} json json对象格式 --> {attr(String):String}(同时变化的属性和值) ???* @param {function} callback 回调函数,用于链式动画 ???* @return {void} ???*/
  //jQuery --> animate ??this.changeStyle = function(obj, json, callback){ clearInterval(obj.timer); var _this = this; //保存init() //一个定时器监视所有属性变化 obj.timer = setInterval(function(){ var flag = true; //判断是否所以的运动都完成了 for(var attr in json){ //初始值var icur = 0;//判断属性,分别处理if(attr == "opacity"){//0.07 * 100 --> 7.000000001 --> round --> 7icur = Math.round(parseFloat(_this.getStyle(obj, attr)) * 100);}else{//console.log(_this);icur = parseInt(_this.getStyle(obj, attr));}//计算速度var speed = (json[attr] - icur) / 8;speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);/* 以下代码是不对的,因为当有一个运动到达目标,就关闭了定时器if(icur == json[target]){clearInterval(timer);}*///有运动未完成就会设置为falseif(icur != json[attr]){flag = false;}if(icur == "opacity"){obj.style.filter = ‘alpha(opacity:‘+ icur + speed +‘)‘;obj.style.opacity = (icur + speed) / 100; }else{obj.style[attr] = icur + speed + ‘px‘;}}//已经遍历了attr,判断是否所有运动都完成了if(flag){clearInterval(obj.timer);//回调if(callback){console.log(_this);callback(_this);}} }, 30); } /** ?* 获取style属性值 ???* @method getStyle ?* @for MyAnimation ?????* @param {Object} obj 元素对象 ?????* @param {String} attr 元素对象属性值 ???*/ this.getStyle = function(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return getComputedStyle(obj,false)[attr]; } }}MyAnimation.prototype.init = init;//使init()创建的对象指向MyAnimationMyAnimation.prototype.init.prototype = MyAnimation.prototype;//创建一个名为MA的MyAnimation外部对象引用 var MA = window.MyAnimation;  

简单模拟jQuery创建对象的方法,以及封装一个js动画框架

原文地址:https://www.cnblogs.com/githubMYL/p/8654677.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved