封装keyframes插件
模仿jquery,使用简单,自动添加浏览器前缀
var keyframes = new SHBKerframes();
keyframes.define([{
name:'myAnimate',
0%:{width:100px;height:100px;transform:scale(1);}
100%:{width:100px;height:100px;transform:scale(2);}
}]);
源码:
/**
*简单的SHBKerframes
*@author:索洪波
*@qq:609690891
*@version:1.0
*/
/**
*@SHBKerframes
*/ function SHBKerframes(){
this.prefix = '' ;
this.jsPrefix = '' ;
this.styleTag = null ; this.init();
this.createStyleTag();
}
SHBKerframes.prototype.init = function(){
var domPrefixes = ['webkit', 'Moz', 'O', 'ms', 'Khtml'];
var style = document.body.style ;
if(style.animationName !== undefined) return false;
for(var i = 0 ;i < domPrefixes.length ; i ++){
if(style[domPrefixes[i]+"AnimationName"] !== undefined){
this.animationName = domPrefixes[i] + 'Animation' ;
this.prefix = '-'+domPrefixes[i].toLowerCase() + '-' ;
this.jsPrefix = domPrefixes[i] ;
}
}
}
SHBKerframes.prototype.createStyleTag = function(css){
var style = document.getElementById('SHBKeyframes') ;
if(!style){
style = document.createElement('style') ;
style.id = 'SHBKeyframes' ;
style.type = 'text/css' ;
document.head.appendChild(style);
}
this.styleTag = style ;
}
SHBKerframes.prototype.createKeyframes = function(keyframe){
var style = document.body.style ;
var frameName = keyframe.name ;
var css = "" ;
css = '@'+this.prefix+'keyframes '+frameName +"{\n" ;
for(var key in keyframe){
if(key == 'name')continue;
css = css + key + '{' ;
for(var attr in keyframe[key]){
var jsAttr = attr.toString().replace(/-(\w)/g,function(){return arguments[1].toUpperCase();})
if(style[this.jsPrefix+jsAttr.charAt(0).toUpperCase()+jsAttr.substr(1)] !== undefined){
css = css + this.prefix + attr + ':' + keyframe[key][attr] +';';
}else{
css = css + attr + ':' + keyframe[key][attr] +';';
}
}
css += '}\n' ;
}
css += '}\n' ;
this.styleTag.appendChild(document.createTextNode(css));
}
SHBKerframes.prototype.define = function(list){
for(var i = 0 ; i < list.length ; i++){
this.createKeyframes(list[i]);
}
}
封装keyframes插件的更多相关文章
- 封装jQuery插件的步骤
引语:jQuery提供了很多插件,我们在开发的过程使用插件能节省时间简化开发也避免从头开始编写每个组件,单我们除了懂得使用别人已编写好的插件以外,也到懂得如何封装属于我们自己的插件,以下就是封装jQu ...
- js封装成插件
由于项目原因,工作一年多还没用js写过插件,项目太成熟,平时基本都是在使用已经封装好的功能插件.感觉自己好low......这两天想自己抽空写一个canvas画统计图与折现图的插件,所以就去网上学习了 ...
- 封装js插件学习指南
封装js插件学习指南 1.原生JavaScript插件编写指南 => 传送门 2.如何定义一个高逼格的原生JS插件 =>传送门 3.手把手教你用原生JavaScript造轮子 => ...
- 第一百三十八节,JavaScript,封装库--插件
JavaScript,封装库--插件 库主要是用来封装一般JavaScript的常规操作代码,而拖拽这种特效代码属于功能性代码,并不是必须的,所以这种类型的代码,我们建议另外封装,在需要的时候作为插件 ...
- 封装jquery插件
最近要到使用别的jquery插件,但部分功能并不能满足,为满足功能,只能对插件进行修改来满足,要修改插件,先要了解插件如何封装, 明白了如何封装插件,才能更好修改插件:如何封装插件? 1.插件封装类型 ...
- 浅析vue封装自定义插件
在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- vue封装第三方插件并发布到npm
前言 写此文前特意google了一下,因为有较详细的开发教程我再写意义不大,有把插件封装成组件的教程,有把自己的组件封住成插件的教程,本文主要说明如何把第三方的插件封装成vue插件,简化配置,一键安装 ...
- jQuery实现轮播切换以及将其封装成插件(3)
在前两篇博文中,我们写了一个普通的轮播切换.但是我们不能每一次需要这个功能就把这些代码有重新敲一次.下面我们就将它封装成一个插件. 至于什么是插件,又为什么要封装插件,不是本文考虑的内容. 我们趁着 ...
随机推荐
- Extjs5.0中的新特性
We are excited that Ext JS 5 is now available! Ext JS 5 introduces many new and exciting improvement ...
- photoshop如何快速切图
作为业余爱好,之前都是用比较笨的方法切图,甚至用裁剪工具一张一张的切. 后来知道用切片工具,但也仅限于互不重叠的图片. 在工作中实际使用时才发现实在是太慢了,慢到上级自己说你不用做了,我来吧. 其实, ...
- MySQL常用命令总结3
id SMALLINT UNSIGNED [AUTO_INCREMENT] PRIMARY KEY, //把id定义为主键且自动排号,每张数据表只有一个主键,不能为NULL,确保记录唯一性 //省略a ...
- 怎么把自己电脑上开发的项目发布到自己电脑IIS上面?
windowsxp中: 步骤: 1.新建一个文件夹,把项目发布到里面(发布的时候需要注意的是: ) 注意:发布方法要选择:文件系统 目标位置选择:你新建来发布的那个文件夹名称 2.在IIS中新建网站 ...
- iOS开发——UIImageView
1.图像点击之后,全屏浏览 - (void)viewDidLoad { [super viewDidLoad]; _myImage=[[UIImageView alloc]initWithFrame: ...
- CoordinatorLayout学习笔记
CoordinatorLayout是一个增强型的FrameLayout.它的作用有两个 作为一个布局的根布局 最为一个为子视图之间相互协调手势效果的一个协调布局 代码如下: <?xml vers ...
- iOS UITabBar
参考文章:http://www.cnblogs.com/wendingding/p/3775488.html 简单明了,不用再总结了.
- 环信 之 iOS 客户端集成四:集成UI 之 会话列表
1. 初始化 EaseConversationListViewController *chatListVC = [[EaseConversationListViewController alloc] ...
- 【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- YII 1.0模型标签与验证规则,前后台验证
model Admin.php model(),tabName()是固定格式 <?php /* 管理员模型 * ----------------------------------------- ...