封装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)
在前两篇博文中,我们写了一个普通的轮播切换.但是我们不能每一次需要这个功能就把这些代码有重新敲一次.下面我们就将它封装成一个插件. 至于什么是插件,又为什么要封装插件,不是本文考虑的内容. 我们趁着 ...
随机推荐
- $.extend 用法
此处参考了RascallySnake 的博客 $.extend(boolean, dest, src1, src2, src3) 第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致 ...
- BufferedReader 输出与BufferedWriter 输入的用法
public static void main(String[] args) { String content[] = {"好久不见了","最近好吗",&qu ...
- CodeForces 652D Nested Segments
离散化+树状数组 先对坐标离散化,把每条线段结尾所在点标1, 询问某条线段内有几条线段的时候,只需询问这段区间的和是多少,询问结束之后再把这条线段尾部所在点标为0 #include<cstdio ...
- RestTemplate 发送Post 多个参数请求
MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>(); requestEntity ...
- Linux SSL 双向认证 浅解
请求方的操作:此步骤是为了验证CA的发证过程. 1.生成私钥: Openssl genrsa 1024 > private.key 生成私钥并保存到private.key文件中 ...
- 对position的理解
作者:zccst 先看看手册 值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "t ...
- stm32使用LWIP实现DHCP客户端
LWIP是一款开源的嵌入式网络协议栈,支持的功能很多,而且能在多任务环境下和单任务裸机环境下跑,今天说说他的移植过程,芯片为STM32,网卡为ENC28J60,无操作系统 首先下载LWIP的源代码,我 ...
- C#webbrowser控件技巧(取得javascript变量值,禁止显示脚本错误)
C#中的webbrowser控件比较好用. 下面本人搜索整理的几个小技巧. 1. 从C#中取得javascript的变量值. using mshtml;using System.Reflection; ...
- MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法
查看Mysql日志 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap( bytes) failed; errno InnoDB: ...
- leetcode--009 Linked List Cycle I
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAACACAIAAAC5q+hAAAAJ+UlEQVR4nO2dwbXrKBJAOyelRShEQw