📄 effects.js
字号:
String.prototype.parseColor = function () {var color = "#";if (this.slice(0, 4) == "rgb(") {var cols = this.slice(4, this.length - 1).split(",");var i = 0;do {color += parseInt(cols[i]).toColorPart();} while (++i < 3);} else {if (this.slice(0, 1) == "#") {if (this.length == 4) {for (var i = 1; i < 4; i++) {color += (this.charAt(i) + this.charAt(i)).toLowerCase();}}if (this.length == 7) {color = this.toLowerCase();}}}return (color.length == 7 ? color : (arguments[0] || this));};Element.collectTextNodes = function (element) {return $A($(element).childNodes).collect(function (node) {return (node.nodeType == 3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ""));}).flatten().join("");};Element.collectTextNodesIgnoreClass = function (element, className) {return $A($(element).childNodes).collect(function (node) {return (node.nodeType == 3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node, className)) ? Element.collectTextNodesIgnoreClass(node, className) : ""));}).flatten().join("");};Element.setContentZoom = function (element, percent) {element = $(element);element.setStyle({fontSize:(percent / 100) + "em"});if (navigator.appVersion.indexOf("AppleWebKit") > 0) {window.scrollBy(0, 0);}return element;};Element.getOpacity = function (element) {return $(element).getStyle("opacity");};Element.setOpacity = function (element, value) {return $(element).setStyle({opacity:value});};Element.getInlineOpacity = function (element) {return $(element).style.opacity || "";};Element.forceRerendering = function (element) {try {element = $(element);var n = document.createTextNode(" ");element.appendChild(n);element.removeChild(n);}catch (e) {}};Array.prototype.call = function () {var args = arguments;this.each(function (f) {f.apply(this, args);});};var Effect = {_elementDoesNotExistError:{name:"ElementDoesNotExistError", message:"The specified DOM element does not exist, but is required for this effect to operate"}, tagifyText:function (element) {if (typeof Builder == "undefined") {throw ("Effect.tagifyText requires including script.aculo.us' builder.js library");}var tagifyStyle = "position:relative";if (/MSIE/.test(navigator.userAgent) && !window.opera) {tagifyStyle += ";zoom:1";}element = $(element);$A(element.childNodes).each(function (child) {if (child.nodeType == 3) {child.nodeValue.toArray().each(function (character) {element.insertBefore(Builder.node("span", {style:tagifyStyle}, character == " " ? String.fromCharCode(160) : character), child);});Element.remove(child);}});}, multiple:function (element, effect) {var elements;if (((typeof element == "object") || (typeof element == "function")) && (element.length)) {elements = element;} else {elements = $(element).childNodes;}var options = Object.extend({speed:0.1, delay:0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each(function (element, index) {new effect(element, Object.extend(options, {delay:index * options.speed + masterDelay}));});}, PAIRS:{"slide":["SlideDown", "SlideUp"], "blind":["BlindDown", "BlindUp"], "appear":["Appear", "Fade"]}, toggle:function (element, effect) {element = $(element);effect = (effect || "appear").toLowerCase();var options = Object.extend({queue:{position:"end", scope:(element.id || "global"), limit:1}}, arguments[2] || {});Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect;Effect.Transitions = {linear:Prototype.K, sinoidal:function (pos) {return (-Math.cos(pos * Math.PI) / 2) + 0.5;}, reverse:function (pos) {return 1 - pos;}, flicker:function (pos) {return ((-Math.cos(pos * Math.PI) / 4) + 0.75) + Math.random() / 4;}, wobble:function (pos) {return (-Math.cos(pos * Math.PI * (9 * pos)) / 2) + 0.5;}, pulse:function (pos, pulses) {pulses = pulses || 5;return (Math.round((pos % (1 / pulses)) * pulses) == 0 ? ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2)));}, none:function (pos) {return 0;}, full:function (pos) {return 1;}};Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize:function () {this.effects = [];this.interval = null;}, _each:function (iterator) {this.effects._each(iterator);}, add:function (effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == "string") ? effect.options.queue : effect.options.queue.position;switch (position) {case "front":this.effects.findAll(function (e) {return e.state == "idle";}).each(function (e) {e.startOn += effect.finishOn;e.finishOn += effect.finishOn;});break;case "with-last":timestamp = this.effects.pluck("startOn").max() || timestamp;break;case "end":timestamp = this.effects.pluck("finishOn").max() || timestamp;break;}effect.startOn += timestamp;effect.finishOn += timestamp;if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) {this.effects.push(effect);}if (!this.interval) {this.interval = setInterval(this.loop.bind(this), 15);}}, remove:function (effect) {this.effects = this.effects.reject(function (e) {return e == effect;});if (this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}}, loop:function () {var timePos = new Date().getTime();for (var i = 0, len = this.effects.length; i < len; i++) {if (this.effects[i]) {this.effects[i].loop(timePos);}}}});Effect.Queues = {instances:$H(), get:function (queueName) {if (typeof queueName != "string") {return queueName;}if (!this.instances[queueName]) {this.instances[queueName] = new Effect.ScopedQueue();}return this.instances[queueName];}};Effect.Queue = Effect.Queues.get("global");Effect.DefaultOptions = {transition:Effect.Transitions.sinoidal, duration:1, fps:60, sync:false, from:0, to:1, delay:0, queue:"parallel"};Effect.Base = function () {};Effect.Base.prototype = {position:null, start:function (options) {this.options = Object.extend(Object.extend({}, Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state = "idle";this.startOn = this.options.delay * 1000;this.finishOn = this.startOn + (this.options.duration * 1000);this.event("beforeStart");if (!this.options.sync) {Effect.Queues.get(typeof this.options.queue == "string" ? "global" : this.options.queue.scope).add(this);}}, loop:function (timePos) {if (timePos >= this.startOn) {if (timePos >= this.finishOn) {this.render(1);this.cancel();this.event("beforeFinish");if (this.finish) {this.finish();}this.event("afterFinish");return;}var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if (frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}}, render:function (pos) {if (this.state == "idle") {this.state = "running";this.event("beforeSetup");if (this.setup) {this.setup();}this.event("afterSetup");}if (this.state == "running") {if (this.options.transition) {pos = this.options.transition(pos);}pos *= (this.options.to - this.options.from);pos += this.options.from;this.position = pos;this.event("beforeUpdate");if (this.update) {this.update(pos);}this.event("afterUpdate");}}, cancel:function () {if (!this.options.sync) {Effect.Queues.get(typeof this.options.queue == "string" ? "global" : this.options.queue.scope).remove(this);}this.state = "finished";}, event:function (eventName) {if (this.options[eventName + "Internal"]) {this.options[eventName + "Internal"](this);}if (this.options[eventName]) {this.options[eventName](this);}}, inspect:function () {var data = $H();for (property in this) {if (typeof this[property] != "function") {data[property] = this[property];}}return "#<Effect:" + data.inspect() + ",options:" + $H(this.options).inspect() + ">";}};Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize:function (effects) {this.effects = effects || [];this.start(arguments[1]);}, update:function (position) {this.effects.invoke("render", position);}, finish:function (position) {this.effects.each(function (effect) {effect.render(1);effect.cancel();effect.event("beforeFinish");if (effect.finish) {effect.finish(position);}effect.event("afterFinish");});}});Effect.Event = Class.create();Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {initialize:function () {var options = Object.extend({duration:0}, arguments[0] || {});this.start(options);}, update:Prototype.emptyFunction});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize:function (element) {this.element = $(element);if (!this.element) {throw (Effect._elementDoesNotExistError);}if (/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) {this.element.setStyle({zoom:1});}var options = Object.extend({from:this.element.getOpacity() || 0, to:1}, arguments[1] || {});this.start(options);}, update:function (position) {this.element.setOpacity(position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize:function (element) {this.element = $(element);if (!this.element) {throw (Effect._elementDoesNotExistError);}var options = Object.extend({x:0, y:0, mode:"relative"}, arguments[1] || {});this.start(options);}, setup:function () {this.element.makePositioned();this.originalLeft = parseFloat(this.element.getStyle("left") || "0");this.originalTop = parseFloat(this.element.getStyle("top") || "0");if (this.options.mode == "absolute") {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}}, update:function (position) {this.element.setStyle({left:Math.round(this.options.x * position + this.originalLeft) + "px", top:Math.round(this.options.y * position + this.originalTop) + "px"});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -