<style>
#myButton{
}
.word{
position: relative;
width: 100%;
margin: 50px auto 0;
}
#word1{
font: 50px/1.5 '\5fae\8f6f\96c5\9ed1',Tahoma,sans-serif;
position: absolute;
opacity: 0;
}
#word2{
margin-left: 80px;
position: absolute;
opacity: 0;
top: 160px;
}
</style>
Hello World
Hello World !
by Tencent AlloyTeam
<script >
//base
(function(){
var J={
$namespace: function(name) {
if ( !name ) {
return window;
}
nsArr = name.split(".");
var ns=window;
for(i = 0 , l = nsArr.length; i < l; i++){
var n = nsArr[i];
ns[n] = ns[n] || {};
ns = ns[n];
}
return ns;
},
$package:function(ns,func){
var target;
if(typeof ns == "function"){
func=ns;
target = window;
}
else if(typeof ns == "string"){
target = this.$namespace(ns);
}
else if(typeof ns == "object"){
target = ns;
}
func.call(target,this);
},
extend:function(destination,source){
for(var n in source){
if(source.hasOwnProperty(n)){
destination[n]=source[n];
}
}
return destination;
},
bind:function(func, context, var_args) {
var slice = [].slice;
var a = slice.call(arguments, 2);
return function(){
return func.apply(context, a.concat(slice.call(arguments)));
};
},
Class:function(){
var length = arguments.length;
var option = arguments[length-1];
option.init = option.init || function(){};
if(length === 2){
var superClass = arguments[0].extend;
var tempClass = function() {};
tempClass.prototype = superClass.prototype;
var subClass = function() {
return new subClass.prototype._init(arguments);
}
subClass.superClass = superClass.prototype;
subClass.callSuper = function(context,func){
var slice = Array.prototype.slice;
var a = slice.call(arguments, 2);
var func = subClass.superClass[func];
if(func){
func.apply(context, a.concat(slice.call(arguments)));
}
};
subClass.prototype = new tempClass();
subClass.prototype.constructor = subClass;
J.extend(subClass.prototype, option);
subClass.prototype._init = function(args){
this.init.apply(this, args);
};
subClass.prototype._init.prototype = subClass.prototype;
return subClass;
}else if(length === 1){
var newClass = function() {
return new newClass.prototype._init(arguments);
}
newClass.prototype = option;
newClass.prototype._init = function(arg){
this.init.apply(this,arg);
};
newClass.prototype._init.prototype = newClass.prototype;
return newClass;
}
},
indexOf:function(arr,elem){
var $T= J.type;
//数组或类数组对象
if(arr.length){
return [].indexOf.call(arr,elem);
}
else if($T.isObject(arr)){
for(var i in arr){
if(arr.hasOwnProperty(i) && arr[i] === elem){
return i;
}
}
}
},
every:function(arr,callback){
if(arr.length){
return [].every.call(arr,callback);
}
else if($T.isObject(arr)){
var flag = true;
this.each(arr,function(e,i,arr){
if(!callback(e,i,arr)) flag = false;
});
return flag;
}
},
some:function(arr,callback){
if(arr.length){
return [].some.call(arr,callback);
}
else if($T.isObject(arr)){
var flag = false;
this.each(arr,function(e,i,arr){
if(callback(e,i,arr)) flag = true;
});
return flag;
}
},
each:function(arr,callback){
var $T = J.type;
if(arr.length){
[].forEach.call(arr,callback);
}
else if($T.isObject(arr)){
for(var i in arr){
if(arr.hasOwnProperty(i))
if(callback.call(arr[i],arr[i],i,arr) === false) return;
}
}
},
map:function(arr,callback){
var $T = J.type;
if(arr.length){
[].map.call(arr,callback);
}
else if($T.isObject(arr)){
for(var i in arr){
if(arr.hasOwnProperty(i))
arr[i] = callback.call(arr[i],arr[i],i,arr);
}
}
},
filter:function(arr,callback){
var $T = J.type;
if(arr.length){
return [].filter.call(arr,callback);
}
else if($T.isObject(arr)){
var newObj={};
this.each(arr,function(e,i){
if(callback(e,i)){
newObj[i] = e;
}
});
return newObj;
}
},
isEmptyObject:function(obj){
for(var n in obj){
return false;
}
return true;
}
}
window.JM=window.J=J;
})();
//connection
J.$package(function(J){
var c = navigator.connection || {type:0};
var ct = ["unknow","ethernet","wifi","cell_2g","cell_3g"];
J.connectType = ct[c.type];
});
//type
J.$package(function(J){
var ots=Object.prototype.toString;
var type={
isArray : function(o){
return o && (o.constructor === Array || ots.call(o) === "[object Array]");
},
isObject : function(o) {
return o && (o.constructor === Object || ots.call(o) === "[object Object]");
},
isBoolean : function(o) {
return (o === false || o) && (o.constructor === Boolean);
},
isNumber : function(o) {
return (o === 0 || o) && o.constructor === Number;
},
isUndefined : function(o) {
return typeof(o) === "undefined";
},
isNull : function(o) {
return o === null;
},
isFunction : function(o) {
return o && (o.constructor === Function);
},
isString : function(o) {
return (o === "" || o) && (o.constructor === String);
}
}
J.type=type;
});
//browser
J.$package(function(J){
var ua = navigator.userAgent;
var platform = {};
platform.android = ua.indexOf("Android") > -1 ,
platform.iPhone = ua.indexOf("iPhone") > -1 ,
platform.iPad = ua.indexOf("iPad") > -1 ,
platform.iPod = ua.indexOf("iPod") > -1 ,
platform.winPhone = ua.indexOf("IE") > -1 ,
platform.IOS = platform.iPad || platform.iPhone;
platform.touchDevice = "ontouchstart" in window;
J.platform = platform;
});
//dom
J.$package(function(J){
var doc = document,
$T = J.type,
tagNameExpr = /^[\w-]+$/,
idExpr = /^#([\w-]*)$/,
classExpr = /^\.([\w-]+)$/,
selectorEngine;
var hasClassListProperty = 'classList' in document.documentElement;
var vendors = ['o', 'ms' ,'moz' ,'webkit'];
var div = document.createElement('div');
var $D={
$:function(selector,context){
var result;
var qsa;
context = context || doc;
//优先使用原始的
if(idExpr.test(selector)) {
result = this.id(selector.replace("#",""));
if(result) return [result] ;
else return [] ;
}
else if(tagNameExpr.test(selector)){
result = this.tagName(selector,context);
}
else if(classExpr.test(selector)){
result = this.className(selector.replace(".",""),context);
}
// //自定义选择器
// else if(selectorEngine) result = selectorEngine(selector,context);
//querySelectorAll
else result = context.querySelectorAll(selector);
//nodeList转为array
return [].slice.call(result);
},
id:function(id){
return doc.getElementById(id);
},
tagName:function(tagName,context){
context=context||doc;
return context.getElementsByTagName(tagName);
},
node:function(name){
return doc.createElement(name);
},
className:function(className,context){
context=context||doc;
return context.getElementsByClassName(className);
},
remove:function(node){
var context = node.parentNode;
if(context) context.removeChild(node);
},
setSelectorEngine:function(func){
selectorEngine=func;
},
matchesSelector:function(ele,selector){
if(!ele || !selector) return;
var matchesSelector = ele.webkitMatchesSelector || ele.mozMatchesSelector || ele.oMatchesSelector || ele.matchesSelector;
if(matchesSelector) return matchesSelector.call(ele,selector);
var list = this.$(selector);
if(J.indexOf(list,ele) > 0) return true;
return false;
},
closest:function(elem,selector){
while(elem){
if($D.matchesSelector(elem,selector)){
return elem;
}
elem = elem.parentNode;
}
},
toDomStyle:function(cssStyle){
if(!$T.isString(cssStyle)) return;
return cssStyle.replace(/\-[a-z]/g,function(m) { return m.charAt(1).toUpperCase(); });
},
toCssStyle:function(domStyle){
if(!$T.isString(domStyle)) return;
return domStyle.replace(/[A-Z]/g, function(m) { return '-'+m.toLowerCase(); });
},
setStyle:function(elem ,styleName,styleValue){
var self = this;
if($T.isArray(elem)){
J.each(elem ,function(e){
self.setStyle(e,styleName,styleValue);
});
return;
}
if($T.isObject(styleName)){
for(var n in styleName){
if(styleName.hasOwnProperty(n)){
elem.style[n] = styleName[n];
}
}
return;
}
if($T.isString(styleName)){
elem.style[styleName] = styleValue;
}
},
//获取带有出产商的属性名
getVendorPropertyName : function(prop) {
var style = div.style;
var _prop;
if (prop in style) return prop;
// _prop = prop;
_prop = prop.charAt(0).toUpperCase() + prop.substr(1);
for(var i = vendors.length; i--;){
var v = vendors[i];
var vendorProp = v + _prop;
if (vendorProp in style) {
return vendorProp;
}
}
},
//检测是否支持3D属性
isSupprot3d : function(){
// var transformStr = $D.getVendorPropertyName("transform");
// $D.setStyle(div ,transformStr ,"rotatex(90deg)");
// if(div.style[transformStr] == "") return false;
// return true;
var p_prop = $D.getVendorPropertyName("perspective");
return p_prop && p_prop in div.style;
},
filterSelector:function(arr,selector){
return J.filter(arr,function(elem){
return $D.matchesSelector(elem,selector);
});
},
addClass:function(){
if(hasClassListProperty){
return function (elem, className) {
if (!elem || !className || $D.hasClass(elem, className)){
return;
}
elem.classList.add(className);
};
}
else{
return function(elem, className){
if (!elem || !className || $D.hasClass(elem, className)) {
return;
}
elem.className += " "+ className;
}
}
}(),
hasClass:function(){
if (hasClassListProperty) {
return function (elem, className) {
if (!elem || !className) {
return false;
}
return elem.classList.contains(className);
};
} else {
return function (elem, className) {
if (!elem || !className) {
return false;
}
return -1 < (' ' + elem.className + ' ').indexOf(' ' + className + ' ');
};
}
}(),
removeClass:function(){
if (hasClassListProperty) {
return function (elem, className) {
if (!elem || !className || !$D.hasClass(elem, className)) {
return;
}
elem.classList.remove(className);
};
} else {
return function (elem, className) {
if (!elem || !className || !$D.hasClass(elem, className)) {
return;
}
elem.className = elem.className.replace(new RegExp('(?:^|\\s)' + className + '(?:\\s|$)'), ' ');
};
}
}(),
toggleClass:function(ele,className){
if($D.hasClass(ele,className)){
$D.removeClass(ele,className);
}
else{
$D.addClass(ele,className);
}
}
};
J.dom=$D;
});
//event
J.$package(function(J){
var $T=J.type;
var isDomEvent=function(obj,evtType){
//addEventListener supported by ie9+
return obj.addEventListener && (("on" + evtType).toLowerCase() in obj || "webkitTransitionEnd" == evtType);
}
var $E={
on:function(obj, evtType, handler){
if($T.isArray(obj)){
for(var i=obj.length;i--;){
$E.on(obj[i], evtType, handler);
}
}
//evtType is a string split by space
if($T.isString(evtType)&&evtType.indexOf(" ")>0){
evtType = evtType.split(" ");
for(var i=evtType.length;i--;){
$E.on(obj, evtType[i], handler);
}
return;
}
//handler is an array
if($T.isArray(handler)){
for(var i=handler.length;i--;){
$E.on(obj, evtType, handler[i]);
}
return;
}
//evtType is an object
if($T.isObject(evtType)){
for(var eName in evtType){
$E.on(obj, eName, evtType[eName]);
}
return;
}
//is dom event support
if(isDomEvent(obj,evtType)){
obj.addEventListener(evtType ,handler ,false);
return;
}
//dom event in origin element
if(obj.elem && isDomEvent(obj.elem,evtType)){
obj.elem.addEventListener(evtType ,handler ,false);
return;
}
//is specific custom event
if(customEvent[evtType]){
customEvent[evtType](obj,handler);
return;
}
//other custom event
if(!obj.events) obj.events={};
if(!obj.events[evtType]) obj.events[evtType]=[];
obj.events[evtType].push(handler);
},
once:function(obj,evtType,handler){
var f = function(){
handler();
$E.off(obj ,evtType ,f);
}
$E.on(obj ,evtType ,f);
},
off:function(obj,evtType,handler){
//evtType is a string split by space
if($T.isString(evtType)&&evtType.indexOf(" ")>0){
evtType = evtType.split(" ");
for(var i=evtType.length;i--;){
$E.off(obj, evtType[i], handler);
}
return;
}
//handler is an array
if($T.isArray(handler)){
for(var i=handler.length;i--;){
$E.off(obj, evtType, handler[i]);
}
return;
}
//evtType is an object
if($T.isObject(evtType)){
for(var eName in evtType){
$E.off(obj, eName, evtType[eName]);
}
return;
}
if(isDomEvent(obj,evtType)){
obj.removeEventListener( evtType , handler ,false );
return;
}
//dom event in origin element
if(obj.elem && isDomEvent(obj.elem,evtType)){
obj.elem.removeEventListener(evtType ,handler ,false);
return;
}
//is specific custom event
if(customEvent[evtType]){
customEvent._off(obj,evtType,handler);
return;
}
if(!evtType) {
obj.events={};
return;
}
if(obj.events){
if(!handler) {
obj.events[evtType]=[];
return;
}
if(obj.events[evtType]){
var evtArr=obj.events[evtType];
for(var i=evtArr.length;i--;){
if(evtArr[i]==handler){
evtArr.splice(i,1);
return;
}
}
}
}
},
fire:function(obj,evtType){
var arg = [].slice.call(arguments,2);
//obj is dom element
if(isDomEvent(obj,evtType)){
var evt = document.createEvent('HTMLEvents');
evt.initEvent(evtType, true, true);
obj.dispatchEvent(evt);
return;
}
//dom event in origin element
if(obj.elem && isDomEvent(obj.elem,evtType)){
var evt = document.createEvent('HTMLEvents');
evt.initEvent(evtType, true, true);
obj.elem.dispatchEvent(evt);
return;
}
if(obj.events&&obj.events[evtType]){
var handler=obj.events[evtType];
for(var i=0,l=handler.length;i -45) return "right";
if(angle >= 45 && angle < 135) return "top";
if(angle >= 135 || angle < -135) return "left";
if(angle >= -135 && angle <= -45) return "bottom";
}
var startEvtHandler = function(e){
// e.stopPropagation();
var touches = e.touches;
if(!touches || touches.length == 1){//鼠标点击或者单指点击
pt_pos = ct_pos = getTouchPos(e);
pt_time = Date.now();
}
}
var moveEvtHandler = function(e){
// e.stopPropagation();
e.preventDefault();
ct_pos = getTouchPos(e);
}
var endEvtHandler = function(e){
// e.stopPropagation();
var dir;
pt_up_pos = ct_pos;
pt_up_time = Date.now();
if(getDist(pt_pos,pt_up_pos) > SWIPE_DISTANCE && pt_up_time - pt_time < SWIPE_TIME){
dir = getSwipeDirection(pt_up_pos,pt_pos);
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"swipe",
direction:dir
});
}
}
$E.on(ele,startEvt,startEvtHandler);
$E.on(ele,moveEvt,moveEvtHandler);
$E.on(ele,endEvt,endEvtHandler);
var evtOpt = {
ele:ele,
evtType:"swipe",
handler:handler
}
evtOpt.actions = {};
evtOpt.actions[startEvt] = startEvtHandler;
evtOpt.actions[moveEvt] = moveEvtHandler;
evtOpt.actions[endEvt] = endEvtHandler;
customEventHandlers.push(evtOpt);
},
transform:function(ele,handler){
var pt_pos1;
var pt_pos2;
var pt_len;//初始两指距离
var pt_angle;//初始两指所成角度
var startEvtHandler = function(e){
var touches = e.touches;
if(!touches) return;
if(touches.length == 2){//双指点击
pt_pos1 = getTouchPos( e.touches[0]);
pt_pos2 = getTouchPos( e.touches[1]);
pt_len = getDist(pt_pos1,pt_pos2);
pt_angle = getAngle(pt_pos1,pt_pos2);
}
}
var moveEvtHandler = function(e){
e.preventDefault();
var touches = e.touches;
if(!touches) return;
if(touches.length == 2){//双指点击
var ct_pos1 = getTouchPos( e.touches[0]);
var ct_pos2 = getTouchPos( e.touches[1]);
var ct_len = getDist(ct_pos1 , ct_pos2);
var ct_angle = getAngle(ct_pos1,ct_pos2);
var scale = ct_len / pt_len;
var rotation = ct_angle - pt_angle;
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"transform",
scale:scale,
rotate:rotate
});
}
}
$E.on(ele,startEvt,startEvtHandler);
$E.on(ele,moveEvt,moveEvtHandler);
var evtOpt = {
ele:ele,
evtType:"transform",
handler:handler
}
evtOpt.actions = {};
evtOpt.actions[startEvt] = startEvtHandler;
evtOpt.actions[moveEvt] = moveEvtHandler;
customEventHandlers.push(evtOpt);
},
scrollstart:function(ele,handler){
var isScrolling;
var scrollTimeId;
var scrollHandler = function(e){
if(!isScrolling){
isScrolling = true;
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"scrollstart"
});
}
clearTimeout(scrollTimeId);
scrollTimeId = setTimeout(function(){
isScrolling = false;
},250);
}
$E.on(ele,"scroll",scrollHandler);
var evtOpt = {
ele:ele,
evtType:"scrollstart",
handler:handler
};
evtOpt.actions = {};
evtOpt.actions["scroll"] = scrollHandler;
customEventHandlers.push(evtOpt);
},
scrollend:function(ele,handler){
var scrollTimeId;
var scrollHandler = function(e){
clearTimeout(scrollTimeId);
scrollTimeId = setTimeout(function(){
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"scrollend"
});
},250);
}
$E.on(ele,"scroll",scrollHandler);
var evtOpt = {
ele:ele,
evtType:"scrollend",
handler:handler
};
evtOpt.actions = {};
evtOpt.actions["scroll"] = scrollHandler;
customEventHandlers.push(evtOpt);
},
scrolltobottom:function(ele,handler){
var body = document.body;
var scrollHandler = function(e){
if(body.scrollHeight <= body.scrollTop + window.innerHeight){
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"scrolltobottom"
});
}
}
$E.on(ele,"scroll",scrollHandler);
var evtOpt = {
ele:ele,
evtType:"scrolltobottom",
handler:handler
};
evtOpt.actions = {};
evtOpt.actions["scroll"] = scrollHandler;
customEventHandlers.push(evtOpt);
},
//兼容性更好的orientationchange事件,这里使用resize实现。不覆盖原生orientation change 和 resize事件
ortchange:function(ele,handler){
var pre_w = window.innerWidth;
var resizeHandler = function(e){
var current_w = window.innerWidth,
current_h = window.innerHeight,
orientation;
if(pre_w == current_w) return;
if(current_w > current_h){
orientation = "landscape";
}
else{
orientation = "portrait";
}
handler.call(ele,{
oriEvt:e,
target:e.target,
type:"ortchange",
orientation:orientation
});
pre_w = current_w;
}
$E.on(window,"resize",resizeHandler);
var evtOpt = {
ele:ele,
evtType:"ortchange",
handler:handler
};
evtOpt.actions = {};
evtOpt.actions["resize"] = resizeHandler;
customEventHandlers.push(evtOpt);
}
}
J.event = $E;
});
//support
J.$package(function(J){
var $D = J.dom,
$E = J.event;
var support = {
fixed:(function(){
var container = document.body;
var el = $D.node('div');
$D.setStyle(el,{
position:"fixed",
top:"100px"
});
container.appendChild(el);
var originalHeight = container.style.height,
originalScrollTop = container.scrollTop;
$D.setStyle(container,"height","3000px");
container.scrollTop = 500;
var elementTop = el.getBoundingClientRect().top;
if(originalHeight)
$D.setStyle(container,"height",originalHeight + "px");
else
$D.setStyle(container,"height","");
container.removeChild(el);
container.scrollTop = originalScrollTop;
return elementTop === 100;
})()
}
J.support = support;
});
//Util
J.$package(function(J){
var $D = J.dom,
$E = J.event,
$T = J.type;
var preventScroll = function(e){
if (e.target.type === 'range') { return; }
e.preventDefault();
}
var hideScroll = function(){
setTimeout(function(){
if(!location.hash){
var ph = window.innerHeight + 60;
if(document.documentElement.clientHeight < ph){
$D.setStyle(document.body,"minHeight", ph + "px");
}
window.scrollTo(0,1);
}
},200);
}
var Util = {
//隐藏URL栏
hideUrlBar:function(){
$E.on(window ,"load" ,hideScroll);
},
//禁止滚动
preventScrolling : function() {
$E.on(document ,'touchmove' ,preventScroll);
},
//启用滚动
activeScrolling:function(){
$E.off(document ,'touchmove' ,preventScroll);
},
//滚动到顶部动画(css3动画)
scrollToTop:function(duration,runType){
var $A = J.Animation;
var body = document.body;
var scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
$D.setStyle(body, $D.getVendorPropertyName("transform"), "translate3d(0,"+ (- scrollTop) + "px,0)");
body.scrollTop ? body.scrollTop = 0:document.documentElement.scrollTop = 0;
new $A({
selector:body,
duration:duration,
runType:runType,
use3d:true
}).translateY(0).transit();
},
//兼容浏览器的fixed定位
fixElement:function(ele,options){
var iu = $T.isUndefined;
var wh = window.innerHeight;
var ww = window.innerWidth;
var eh = ele.clientHeight;
var ew = ele.clientWidth;
var top;
var left;
//支持原生fixed
if(J.support.fixed){
$D.setStyle(ele,{
position:"fixed",
top:options.top + "px",
left:options.left + "px",
bottom:options.bottom + "px",
right:options.right + "px"
});
return;
}
//fixed模拟
$E.on(window,"scrollend",function(){
top = window.pageYOffset + ( iu(options.top) ? (iu(options.bottom) ? "" : wh - options.bottom - eh) : options.top );
left = window.pageXOffset + ( iu(options.left) ? (iu(options.right) ? "" : ww - options.right - ew) : options.left );
$D.setStyle(ele,{
position:"absolute",
top:top + "px",
left:left + "px"
});
});
},
//hover效果
hoverEffect:function(ele,className){
var startEvt,moveEvt,endEvt;
var touchDevice = J.platform.touchDevice;
var upTarget;
//选择不同事件
if(touchDevice){
startEvt="touchstart";
moveEvt="touchmove";
endEvt="touchend";
upTarget = ele;
}
else{
startEvt="mousedown";
moveEvt="mousemove";
endEvt="mouseup";
upTarget = document.body;
}
$E.on(ele,startEvt,function(){
$D.addClass(ele,className);
});
$E.on(ele,moveEvt,function(e){
e.preventDefault();
});
$E.on(upTarget,endEvt,function(){
$D.removeClass(ele,className);
});
}
}
J.Util = Util;
});
//animation time, runType ,scale, rotate, rotateX, rotateY, translateX, translateY, skewX, skewY
J.$package(function(J){
var $D = J.dom,
$E = J.event,
$T = J.type;
//3d支持
var support3d = $D.isSupprot3d();
var finishedCount = 0;
var Animation = J.Class({
init:function(options){
this.setElems(options.selector);
this.setDuration(options.duration || 1000);
this.setRunType(options.runType || "ease-in-out");
this.setDelay(options.delay || 0);
this.setUsed3d(options.use3d);
this.transformArr = [];
},
setDuration:function(duration){
this.duration = duration;
return this;
},
setDelay:function(delay){
this.delay = delay;
return this;
},
setElems:function(selector){
if($T.isString(selector)){
this.elems = $D.$(selector);
}
else if($T.isArray(selector)){
this.elems = selector;
}
else if(selector.tagName){
this.elems = [selector];
}
return this;
},
setRunType:function(runType){
this.runType = runType;
return this;
},
setUsed3d:function(use3d){
this.use3d = use3d;
return this;
},
scale:function(scale){
this.transformArr.push("scale(" + scale + ")");
return this;
},
scaleX:function(scaleX){
this.transformArr.push("scalex(" + scaleX + ")");
return this;
},
scaleY:function(scaleY){
this.transformArr.push("scaley(" + scaleY + ")");
return this;
},
rotate:function(rotate){
this.transformArr.push("rotate(" + rotate + "deg)");
return this;
},
rotateX:function(rotateX){
this.transformArr.push("rotatex(" + rotateX + "deg)");
return this;
},
rotateY:function(rotateX){
this.transformArr.push("rotatey(" + rotateY + "deg)");
return this;
},
rotateZ:function(rotateZ){
this.transformArr.push("rotatez(" + rotateZ + "deg)");
return this;
},
translate:function(translateX,translateY,translateZ){
if(support3d && translateZ)
this.transformArr.push("translate3d" + '(' + translateX + ',' + translateY + ','+ translateZ +')');
else
this.transformArr.push("translate" + '(' + translateX + ',' + translateY + ')');
return this;
},
translateX:function(translateX){
this.translate(translateX,0);
return this;
},
translateY:function(translateY){
this.translate(0,translateY);
return this;
},
skew:function(x,y){
this.transformArr.push("skew(" + x + "deg," + y + "deg)");
return this;
},
skewX:function(x){
this.transformArr.push("skewx(" + x + "deg)");
return this;
},
skewY:function(y){
this.transformArr.push("skewy(" + y + "deg)");
return this;
},
setStyle:function(styleName,styleValue){
var s = "";
if($T.isUndefined(this.styleStr)) this.styleStr = "";
//样式变化
if($T.isObject(styleName)){
J.each(styleName ,function(sv,sn){
s += $D.toCssStyle($D.getVendorPropertyName(sn)) + ":" + sv + ";";
});
}
else if($T.isString(styleName)){
s += $D.toCssStyle($D.getVendorPropertyName(styleName)) + ":" + styleValue + ";";
}
this.styleStr += s;
return this;
},
toOrigin:function(){
this.transformArr = [];
return this;
},
transit:function(onFinished){
var self = this;
var elems = this.elems;
J.each(elems ,function(e){
self._transit(e);
});
window.setTimeout(function(){
$E.fire(self,"end");
J.each(elems,function(elem){
$D.setStyle(elem ,$D.getVendorPropertyName("transition") ,"");
});
onFinished && onFinished.call(self);
},this.duration);
return this;
},
_transit:function(elem){
var self = this;
var transformStr = this.transformArr.join(" ");
if(support3d && this.use3d){
transformStr += " translatez(0)";
}
var aStr = "all"
+ ' ' + this.duration/1000 + 's '
+ this.runType
+ ' ' + this.delay/1000 + 's';
$D.setStyle(elem ,$D.getVendorPropertyName("transition") ,aStr);
elem.style[$D.getVendorPropertyName("transform")] = transformStr;
elem.style.cssText += this.styleStr;
$E.fire(this ,"start");
}
});
J.Animation = Animation;
});
//http
J.$package(function(J){
// var localData;
// var saveDataLocal = function(data){
// if(!localdata) localdata = {};
// else localdata = JSON.parse(localStorage.getItem("localdata"));
// localdata[Date.now()] = data;
// localStorage.setItem("localdata",JSON.stringify(localData));
// }
// var getLocalData = function(){
// var localdataStr = localStorage.getItem("localdata");
// if(localdataStr){
// localdata = JSON.parse(localdataStr);
// }
// return localdata;
// }
// $E.on(window,"online",function(){
// var data = getLocalData();
// for(var n in data){
// var opt = data[n];
// http.ajax(opt);
// }
// });
// $E.on(window,"offline",function(){
// });
var http = {
serializeParam : function ( param ) {
if ( !param ) return '';
var qstr = [];
for ( var key in param ) {
qstr.push( encodeURIComponent(key) + '=' + encodeURIComponent(param[key]) );
};
return qstr.join('&');
},
getUrlParam : function ( name ,href ,noDecode ) {
var re = new RegExp( '(?:\\?|#|&)' + name + '=([^&]*)(?:$|&|#)', 'i' ), m = re.exec( href );
var ret = m ? m[1] : '' ;
return !noDecode ? decodeURIComponent( ret ) : ret;
},
ajax : function ( option ) {
var o = option;
var m = o.method.toLocaleUpperCase();
var isPost = 'POST' == m;
var isComplete = false;
var overtime = o.overtime;
var withCredentials = o.withCredentials;//跨域ajax
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : false;
if ( !xhr ) {
o.error && o.error.call( null, { ret : 999 , msg : 'Create XHR Error!' } );
return false;
}
var qstr = http.serializeParam( o.param );
// get 请求 参数处理
!isPost && ( o.url += ( o.url.indexOf( '?' ) > -1 ? '&' : '?' ) + qstr );
xhr.open( m, o.url, true );
if(withCredentials) xhr.withCredentials = true;
isPost && xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
xhr.onreadystatechange = function(){
if ( 4 == xhr.readyState ) {
var status = xhr.status;
if ( (status >= 200 && status < 300) || status == 304) {
var response = xhr.responseText.replace( /(\r|\n|\t)/gi, '' );
// var m = /callback\((.+)\)/gi.exec( response );
// var result = { ret : 998, msg : '解析数据出错,请稍后再试' };
// try{ result = eval( '(' + m[1] + ')' ) } catch ( e ) {};
// result = eval( '(' + m[1] + ')' )
o.success && o.success(JSON.parse(response),xhr);
}else{
o.error && o.error(xhr);
};
isComplete = true;
}
};
xhr.send( isPost ? qstr : void(0) );
if(overtime){
setTimeout(function(){
if(!isComplete){
xhr.abort();//不abort同一url无法重新发送请求?
o.timeout && o.timeout(xhr);
}
},overtime);
}
return xhr;
},
offlineSend:function(options){
if(navigator.onLine){
http.ajax(options);
}
else{
saveDataLocal(options);
}
}
}
J.http = http;
});
</script>
<script>
var $E = JM.event;
var $D = JM.dom;
var btn = $D.id('myButton');
var word1 = $D.id('word1');
var word2 = $D.id('word2');
$E.on(btn,'click',function(){
//设置动画基本参数,并且每个动画间隔为1.5秒
J.Animation({
selector:'#word1',
duration:1500,
use3d:true
}).setStyle({ //向右运动了40%,并且color变成蓝色
'top':'60px',
'opacity':'1'
}).transit(function(){
this.setDuration(600);
this.scale(2).setStyle({
'top': '40px',
'opacity':'0'
}).transit(function(){
//清空dom的style,让动画回归起初状态
});
});
J.Animation({
selector:'#word2',
duration: 1500,
use3d : true
}).setStyle({
'top':'140px',
'opacity':'1'
}).transit(function(){
this.setDuration(800);
this.scale(2).setStyle({
'top': '150px',
'opacity':'0'
}).transit(function(){
word2.style.cssText = "";
});
});
});
</script>
浏览器可以,但是andriod 上,用webview就不可以,点击没有动画