一.缘由

公司的移动端项目,采用zepto为主要框架,但是zepto毕竟是精简版的jquery,体积小了,功能自然没有这么强大,特别是动画和选择器这两块,需要我们自己去拓展。

在项目开发过程中,很多页面过渡需要用到动画,简单的show/hide过渡太生硬,对用户不友好,并且移动端大多都是采用slide效果,此文主要是为zepto拓展slide动画。

二.发现

从zepto的在线文档上可以发现一个发布在github上的动画模块,但是缺少slide效果,度娘上找了找,相关的极少,只发现了一个slideDown的例子,所以我们就照着这个例子写了几个常用的slide动画。

三.行动

首先,我们把动画方向分为上下滑动和左右滑动,滑动形式分为元素自身的伸缩和相对位移

1.左右slide

这应该是最常用的一个效果

贴上代码:注释部分二选一, slideLeft 和 slideRight 的滑动形式必须设为一致,不然无法工作

$.fn.slideLeft = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素宽度
var width = this.width();

//-------通过伸缩元素宽度实现动画-------
//return this.css({
// top: 0,
// position: position,
// visibility: 'visible',
// overflow: 'auto'
//}).animate({ width: 0 }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ left: -width }, speed, null, callback);
};

$.fn.slideRight = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素宽度
var width = this.width() === 0 ? $(window).width() : this.width();

//-------通过伸缩元素宽度实现动画-------
//return this.css({
// top: 0,
// width: 0,
// position: position,
// visibility: 'visible',
// overflow: 'auto'
//}).animate({ width: width }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: 0,
left: -width,
position: position,
visibility: 'visible',
overflow: 'auto',
}).animate({ left: 0 }, speed, null, callback);
};

$.fn.slideLeft = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素宽度var width = this.width();//-------通过伸缩元素宽度实现动画-------//return this.css({//    top: 0,//    position: position,//    visibility: 'visible',//    overflow: 'auto'//}).animate({ width: 0 }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ left: -width }, speed, null, callback);};$.fn.slideRight = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素宽度var width = this.width() === 0 ? $(window).width() : this.width();//-------通过伸缩元素宽度实现动画-------//return this.css({//    top: 0,//    width: 0,//    position: position,//    visibility: 'visible',//    overflow: 'auto'//}).animate({ width: width }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: 0,left: -width,position: position,visibility: 'visible',overflow: 'auto',}).animate({ left: 0 }, speed, null, callback);};

左右位移效果图:

左右伸缩效果图:

2.上下slide

贴上代码:注释部分二选一, slideUp 和 slideDown 的滑动形式必须设为一致,不然无法工作

$.fn.slideDown = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素高度
var height = this.height() === 0 ? $(window).height() : this.height();

//-------通过伸缩元素高度实现动画-------
//return this.css({
// position: position,
// visibility: 'visible',
// overflow: 'auto',
// height: 0
//}).animate({ height: height }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: -height,
left: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ top: 0 }, speed, null, callback);
};

$.fn.slideUp = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'auto'
});
//获取元素高度
var height = this.height();

//-------通过伸缩元素高度实现动画-------
//return this.css({
// position: position,
// visibility: 'visible',
// overflow: 'hidden',
// height: height
//}).animate({ height: 0 }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
left: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ top: -height }, speed, null, callback);
};

 $.fn.slideDown = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素高度var height = this.height() === 0 ? $(window).height() : this.height();//-------通过伸缩元素高度实现动画-------//return this.css({//    position: position,//    visibility: 'visible',//    overflow: 'auto',//    height: 0//}).animate({ height: height }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: -height,left: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ top: 0 }, speed, null, callback);};$.fn.slideUp = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'auto'});//获取元素高度var height = this.height();//-------通过伸缩元素高度实现动画-------//return this.css({//    position: position,//    visibility: 'visible',//    overflow: 'hidden',//    height: height//}).animate({ height: 0 }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({left: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ top: -height }, speed, null, callback);};

上下位移效果图:

上下伸缩效果图:

四.结束

这样,我们在项目中就能愉快的使用动画了。

顺便附上整个动画模块,但在这之前必须先添加上animate模块,因为zepto本身是不具有animate事件的,许多模块都是单独分出去的,可以参考这里,代码我们可以从github中的animate模块复制进去。

//animate模块
; (function ($, undefined) {
var prefix = '', eventPrefix,
vendors = { Webkit: 'webkit', Moz: '', O: 'o' },
testEl = document.createElement('div'),
supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
transform,
transitionProperty, transitionDuration, transitionTiming, transitionDelay,
animationName, animationDuration, animationTiming, animationDelay,
cssReset = {}

function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() }
function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }

if (testEl.style.transform === undefined) $.each(vendors, function (vendor, event) {
if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
prefix = '-' + vendor.toLowerCase() + '-'
eventPrefix = event
return false
}
})

transform = prefix + 'transform'
cssReset[transitionProperty = prefix + 'transition-property'] =
cssReset[transitionDuration = prefix + 'transition-duration'] =
cssReset[transitionDelay = prefix + 'transition-delay'] =
cssReset[transitionTiming = prefix + 'transition-timing-function'] =
cssReset[animationName = prefix + 'animation-name'] =
cssReset[animationDuration = prefix + 'animation-duration'] =
cssReset[animationDelay = prefix + 'animation-delay'] =
cssReset[animationTiming = prefix + 'animation-timing-function'] = ''

$.fx = {
off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
speeds: { _default: 400, fast: 200, slow: 600 },
cssPrefix: prefix,
transitionEnd: normalizeEvent('TransitionEnd'),
animationEnd: normalizeEvent('AnimationEnd')
}

$.fn.animate = function (properties, duration, ease, callback, delay) {
if ($.isFunction(duration))
callback = duration, ease = undefined, duration = undefined
if ($.isFunction(ease))
callback = ease, ease = undefined
if ($.isPlainObject(duration))
ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
if (duration) duration = (typeof duration == 'number' ? duration :
($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
if (delay) delay = parseFloat(delay) / 1000
return this.anim(properties, duration, ease, callback, delay)
}

$.fn.anim = function (properties, duration, ease, callback, delay) {
var key, cssValues = {}, cssProperties, transforms = '',
that = this, wrappedCallback, endEvent = $.fx.transitionEnd,
fired = false

if (duration === undefined) duration = $.fx.speeds._default / 1000
if (delay === undefined) delay = 0
if ($.fx.off) duration = 0

if (typeof properties == 'string') {
// keyframe animation
cssValues[animationName] = properties
cssValues[animationDuration] = duration + 's'
cssValues[animationDelay] = delay + 's'
cssValues[animationTiming] = (ease || 'linear')
endEvent = $.fx.animationEnd
} else {
cssProperties = []
// CSS transitions
for (key in properties)
if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
else cssValues[key] = properties[key], cssProperties.push(dasherize(key))

if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
if (duration > 0 && typeof properties === 'object') {
cssValues[transitionProperty] = cssProperties.join(', ')
cssValues[transitionDuration] = duration + 's'
cssValues[transitionDelay] = delay + 's'
cssValues[transitionTiming] = (ease || 'linear')
}
}

wrappedCallback = function (event) {
if (typeof event !== 'undefined') {
if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
$(event.target).unbind(endEvent, wrappedCallback)
} else
$(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout

fired = true
$(this).css(cssReset)
callback && callback.call(this)
}
if (duration > 0) {
this.bind(endEvent, wrappedCallback)
// transitionEnd is not always firing on older Android phones
// so make sure it gets fired
setTimeout(function () {
if (fired) return
wrappedCallback.call(that)
}, ((duration + delay) * 1000) + 25)
}

// trigger page reflow so new elements can animate
this.size() && this.get(0).clientLeft

this.css(cssValues)

if (duration <= 0) setTimeout(function () {
that.each(function () { wrappedCallback.call(this) })
}, 0)

return this
}

testEl = null
})(Zepto)
//动画效果模块
; (function ($, undefined) {
var document = window.document, docElem = document.documentElement,
origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle

function anim(el, speed, opacity, scale, callback) {
if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
var props = { opacity: opacity }
if (scale) {
props.scale = scale
el.css($.fx.cssPrefix + 'transform-origin', '0 0')
}
return el.animate(props, speed, null, callback);
}

function hide(el, speed, scale, callback) {
return anim(el, speed, 0, scale, function () {
origHide.call($(this))
callback && callback.call(this)
})
}

$.fn.show = function (speed, callback) {
origShow.call(this)
//不是很理解作者的想法,如果这里继续执行下去,所有调用zepto原生show事件的元素,都会被这个事件覆盖,并且透明度都为被设为1...
if (speed === undefined) return origShow.call(this) // 原版为:if (speed === undefined) speed = 0
else this.css('opacity', 0)
return anim(this, speed, 1, '1,1', callback)
}

$.fn.hide = function (speed, callback) {
if (speed === undefined) return origHide.call(this)
else return hide(this, speed, '0,0', callback)
}

$.fn.toggle = function (speed, callback) {
if (speed === undefined || typeof speed == 'boolean')
return origToggle.call(this, speed)
else return this.each(function () {
var el = $(this)
el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
})
}

$.fn.fadeTo = function (speed, opacity, callback) {
return anim(this, speed, opacity, null, callback)
}

$.fn.fadeIn = function (speed, callback) {
var target = this.css('opacity')
if (target > 0) this.css('opacity', 0)
else target = 1
return origShow.call(this).fadeTo(speed, target, callback)
}

$.fn.fadeOut = function (speed, callback) {
return hide(this, speed, null, callback)
}

$.fn.fadeToggle = function (speed, callback) {
return this.each(function () {
var el = $(this)
el[
(el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
](speed, callback)
})
}

$.fn.slideDown = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素高度
var height = this.height() === 0 ? $(window).height() : this.height();

//-------通过伸缩元素高度实现动画-------
//return this.css({
// position: position,
// visibility: 'visible',
// overflow: 'auto',
// height: 0
//}).animate({ height: height }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: -height,
left: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ top: 0 }, speed, null, callback);
};

$.fn.slideUp = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'auto'
});
//获取元素高度
var height = this.height();

//-------通过伸缩元素高度实现动画-------
//return this.css({
// position: position,
// visibility: 'visible',
// overflow: 'hidden',
// height: height
//}).animate({ height: 0 }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
left: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ top: -height }, speed, null, callback);
};

$.fn.slideLeft = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素宽度
var width = this.width();

//-------通过伸缩元素宽度实现动画-------
//return this.css({
// top: 0,
// position: position,
// visibility: 'visible',
// overflow: 'auto'
//}).animate({ width: 0 }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: 0,
position: position,
visibility: 'visible',
overflow: 'auto'
}).animate({ left: -width }, speed, null, callback);
};

$.fn.slideRight = function (speed, callback) {
//获取元素position
var position = this.css('position');
this.show().css({
position: 'absolute',
visibility: 'hidden'
});
//获取元素宽度
var width = this.width() === 0 ? $(window).width() : this.width();

//-------通过伸缩元素宽度实现动画-------
//return this.css({
// top: 0,
// width: 0,
// position: position,
// visibility: 'visible',
// overflow: 'auto'
//}).animate({ width: width }, speed, null, callback);

//-------通过移动元素相对位置实现动画-------
return this.css({
top: 0,
left: -width,
position: position,
visibility: 'visible',
overflow: 'auto',
}).animate({ left: 0 }, speed, null, callback);
};
})(Zepto)

 //animate模块; (function ($, undefined) {var prefix = '', eventPrefix,vendors = { Webkit: 'webkit', Moz: '', O: 'o' },testEl = document.createElement('div'),supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,transform,transitionProperty, transitionDuration, transitionTiming, transitionDelay,animationName, animationDuration, animationTiming, animationDelay,cssReset = {}function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() }function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }if (testEl.style.transform === undefined) $.each(vendors, function (vendor, event) {if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {prefix = '-' + vendor.toLowerCase() + '-'eventPrefix = eventreturn false}})transform = prefix + 'transform'cssReset[transitionProperty = prefix + 'transition-property'] =cssReset[transitionDuration = prefix + 'transition-duration'] =cssReset[transitionDelay = prefix + 'transition-delay'] =cssReset[transitionTiming = prefix + 'transition-timing-function'] =cssReset[animationName = prefix + 'animation-name'] =cssReset[animationDuration = prefix + 'animation-duration'] =cssReset[animationDelay = prefix + 'animation-delay'] =cssReset[animationTiming = prefix + 'animation-timing-function'] = ''$.fx = {off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),speeds: { _default: 400, fast: 200, slow: 600 },cssPrefix: prefix,transitionEnd: normalizeEvent('TransitionEnd'),animationEnd: normalizeEvent('AnimationEnd')}$.fn.animate = function (properties, duration, ease, callback, delay) {if ($.isFunction(duration))callback = duration, ease = undefined, duration = undefinedif ($.isFunction(ease))callback = ease, ease = undefinedif ($.isPlainObject(duration))ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.durationif (duration) duration = (typeof duration == 'number' ? duration :($.fx.speeds[duration] || $.fx.speeds._default)) / 1000if (delay) delay = parseFloat(delay) / 1000return this.anim(properties, duration, ease, callback, delay)}$.fn.anim = function (properties, duration, ease, callback, delay) {var key, cssValues = {}, cssProperties, transforms = '',that = this, wrappedCallback, endEvent = $.fx.transitionEnd,fired = falseif (duration === undefined) duration = $.fx.speeds._default / 1000if (delay === undefined) delay = 0if ($.fx.off) duration = 0if (typeof properties == 'string') {// keyframe animationcssValues[animationName] = propertiescssValues[animationDuration] = duration + 's'cssValues[animationDelay] = delay + 's'cssValues[animationTiming] = (ease || 'linear')endEvent = $.fx.animationEnd} else {cssProperties = []// CSS transitionsfor (key in properties)if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') 'else cssValues[key] = properties[key], cssProperties.push(dasherize(key))if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)if (duration > 0 && typeof properties === 'object') {cssValues[transitionProperty] = cssProperties.join(', ')cssValues[transitionDuration] = duration + 's'cssValues[transitionDelay] = delay + 's'cssValues[transitionTiming] = (ease || 'linear')}}wrappedCallback = function (event) {if (typeof event !== 'undefined') {if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"$(event.target).unbind(endEvent, wrappedCallback)} else$(this).unbind(endEvent, wrappedCallback) // triggered by setTimeoutfired = true$(this).css(cssReset)callback && callback.call(this)}if (duration > 0) {this.bind(endEvent, wrappedCallback)// transitionEnd is not always firing on older Android phones// so make sure it gets firedsetTimeout(function () {if (fired) returnwrappedCallback.call(that)}, ((duration + delay) * 1000) + 25)}// trigger page reflow so new elements can animatethis.size() && this.get(0).clientLeftthis.css(cssValues)if (duration <= 0) setTimeout(function () {that.each(function () { wrappedCallback.call(this) })}, 0)return this}testEl = null})(Zepto)//动画效果模块; (function ($, undefined) {var document = window.document, docElem = document.documentElement,origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.togglefunction anim(el, speed, opacity, scale, callback) {if (typeof speed == 'function' && !callback) callback = speed, speed = undefinedvar props = { opacity: opacity }if (scale) {props.scale = scaleel.css($.fx.cssPrefix + 'transform-origin', '0 0')}return el.animate(props, speed, null, callback);}function hide(el, speed, scale, callback) {return anim(el, speed, 0, scale, function () {origHide.call($(this))callback && callback.call(this)})}$.fn.show = function (speed, callback) {origShow.call(this)//不是很理解作者的想法,如果这里继续执行下去,所有调用zepto原生show事件的元素,都会被这个事件覆盖,并且透明度都为被设为1...if (speed === undefined) return origShow.call(this) // 原版为:if (speed === undefined) speed = 0else this.css('opacity', 0)return anim(this, speed, 1, '1,1', callback)}$.fn.hide = function (speed, callback) {if (speed === undefined) return origHide.call(this)else return hide(this, speed, '0,0', callback)}$.fn.toggle = function (speed, callback) {if (speed === undefined || typeof speed == 'boolean')return origToggle.call(this, speed)else return this.each(function () {var el = $(this)el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)})}$.fn.fadeTo = function (speed, opacity, callback) {return anim(this, speed, opacity, null, callback)}$.fn.fadeIn = function (speed, callback) {var target = this.css('opacity')if (target > 0) this.css('opacity', 0)else target = 1return origShow.call(this).fadeTo(speed, target, callback)}$.fn.fadeOut = function (speed, callback) {return hide(this, speed, null, callback)}$.fn.fadeToggle = function (speed, callback) {return this.each(function () {var el = $(this)el[(el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'](speed, callback)})}$.fn.slideDown = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素高度var height = this.height() === 0 ? $(window).height() : this.height();//-------通过伸缩元素高度实现动画-------//return this.css({//    position: position,//    visibility: 'visible',//    overflow: 'auto',//    height: 0//}).animate({ height: height }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: -height,left: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ top: 0 }, speed, null, callback);};$.fn.slideUp = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'auto'});//获取元素高度var height = this.height();//-------通过伸缩元素高度实现动画-------//return this.css({//    position: position,//    visibility: 'visible',//    overflow: 'hidden',//    height: height//}).animate({ height: 0 }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({left: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ top: -height }, speed, null, callback);};$.fn.slideLeft = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素宽度var width = this.width();//-------通过伸缩元素宽度实现动画-------//return this.css({//    top: 0,//    position: position,//    visibility: 'visible',//    overflow: 'auto'//}).animate({ width: 0 }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: 0,position: position,visibility: 'visible',overflow: 'auto'}).animate({ left: -width }, speed, null, callback);};$.fn.slideRight = function (speed, callback) {//获取元素positionvar position = this.css('position');this.show().css({position: 'absolute',visibility: 'hidden'});//获取元素宽度var width = this.width() === 0 ? $(window).width() : this.width();//-------通过伸缩元素宽度实现动画-------//return this.css({//    top: 0,//    width: 0,//    position: position,//    visibility: 'visible',//    overflow: 'auto'//}).animate({ width: width }, speed, null, callback);//-------通过移动元素相对位置实现动画-------return this.css({top: 0,left: -width,position: position,visibility: 'visible',overflow: 'auto',}).animate({ left: 0 }, speed, null, callback);};})(Zepto)

为Zepto添加Slide动画效果相关推荐

  1. UE4 Sequence添加基础动画效果 (03-主序列的使用)

    在上一篇的基础上添加一些摄像头的跟拍效果 效果: 步骤: 1.鼠标右键新建 Animation->关卡序列 命名为主序列 2.双击打开主序列 3.点击 窗口->内容浏览器->内容浏览 ...

  2. android ui动画效果怎么做,AndroidUI 布局动画-为列表添加布局动画效果

    新建一个Android project ,使MainActivity 继承自 ListActivity: public class MainActivity extends ListActivity ...

  3. html5添加flash动画效果,霸气的HTML5 7款无Flash HTML5动画特效

    本文作者html5tricks,转载请注明出处 以前我们想在网页上实现一些动画特效,第一选择肯定是Flash,但是现在 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟 ...

  4. android添加人物动画效果,android – RecyclerView:如何创建插入动画效果?

    下面是我在适配器中添加动画的方法.这将使推动效果生动,行从右侧进入. 首先在xml中定义动画(res / anim / push_left_in.xml) android:duration=" ...

  5. 在html中加动画效果,html5中css3新添加的动画效果

    字css3中,动画着重要说的就是:transition属性,表示过渡 (1) 如何定义一个动画: 如需在 CSS3 中创建动画,您需要学习 @keyframes 规则. div { width:100 ...

  6. html5添加flash动画效果,用JavaScript/HTML5实现Flash功能

    一个叫Chris Smoak的程序员,最近发起一个使用JavaScript/HTML5实现Flash功能的开源项目,Smokescreen,可以将 Flash动画转换为纯HTML5 + JavaScr ...

  7. 前端三件套系例之JQuery——JQuery动画效果、JQuery插件、

    文章目录 1 JQuery动画效果 1. 基本效果 2. 滑动效果 3 淡入淡出效果 4 自定义动画 5 动画控制 6 设置 7 事件 7-1 常用事件 7-2 事件绑定 7-3 移除事件 7-4 阻 ...

  8. Android UI设计与开发】第03期:引导界面(三)仿微信引导界面以及动画效果

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8985457        基于前两篇比较简单的实例做铺垫之后,这一篇我们来实 ...

  9. 引导界面(三)仿微信引导界面以及动画效果

    基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧 ...

最新文章

  1. 和为s的连续正数序列
  2. 练习7-11 字符串逆序 (15 分)
  3. Elasticsearch学习笔记-05浏览数据
  4. SharePoint学习札记[3] — Office SharePoint Server 2007部署
  5. UNIX(进程间通信):02---父子进程之间的数据共享分析
  6. 从零开始配置服务器密码机的开发环境
  7. Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制
  8. 【开发工具】之linux下makefile编写
  9. 计算机二级MS office 复习思维导图
  10. 2018-4-17论文《狼群算法的研究与应用》笔记1 智能算法简介;狼群算法国内外研究现状以及参看文献
  11. 2021年应用市场放假安排
  12. 51单片机入门学习 第六天
  13. 微信开发 -- 自定义菜单
  14. mysql导入dum_mysql,mysqldump命令导入 导出表结构或数据
  15. Kibana5数据探索使用(Discover功能)
  16. web图书销售管理系统_图书进销存管理软件的优势是什么?
  17. 分析了 6000 款 App,原来还有这么多多多多多多多神器!
  18. 二进制补码转为十进制
  19. 第6章 SQL Server数据库设计
  20. 加斯帕《数目的游戏问题》

热门文章

  1. Oracle ASM 翻译系列第七弹:高级知识 How many partners?
  2. django 1.9 后台中文界面
  3. UICountingLabel实现数字变化的动画效果-b
  4. dedecms织梦模板修改专题路径的方法
  5. 没有找到MFC80D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复问题。...
  6. Aix netstat命令解析
  7. 要管理此计算机上的用户账户,win10用户账户控制 你要允许此应用 若要继续请输入管理员密码...
  8. java实例变量成员变量_Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法...
  9. vector容器与iterator迭代器
  10. python import caffe失败的可能原因