博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
旋转的星空
阅读量:6425 次
发布时间:2019-06-23

本文共 24357 字,大约阅读时间需要 81 分钟。

jquery.spritely:  

/* * jQuery spritely 0.6.7 * http://spritely.net/ * * Documentation: * http://spritely.net/documentation/ * * Copyright 2010-2011, Peter Chater, Artlogic Media Ltd, http://www.artlogic.net/ * Dual licensed under the MIT or GPL Version 2 licenses. * */(function($) {    $._spritely = {        // shared methods and variables used by spritely plugin        instances: {},        animate: function(options) {            var el = $(options.el);            var el_id = el.attr('id');            if (!$._spritely.instances[el_id]) {                return this;            }            options = $.extend(options, $._spritely.instances[el_id] || {});            if (options.type == 'sprite' && options.fps) {                if (options.play_frames && !$._spritely.instances[el_id]['remaining_frames']) {                    $._spritely.instances[el_id]['remaining_frames'] = options.play_frames + 1;                } else if (options.do_once && !$._spritely.instances[el_id]['remaining_frames']) {                    $._spritely.instances[el_id]['remaining_frames'] = options.no_of_frames;                }                var frames;                var animate = function(el) {                    var w = options.width, h = options.height;                    if (!frames) {                        frames = [];                        total = 0                        for (var i = 0; i < options.no_of_frames; i ++) {                            frames[frames.length] = (0 - total);                            total += w;                        }                    }                    if ($._spritely.instances[el_id]['current_frame'] == 0) {                        if (options.on_first_frame) {                            options.on_first_frame(el);                        }                    } else if ($._spritely.instances[el_id]['current_frame'] == frames.length - 1) {                        if (options.on_last_frame) {                            options.on_last_frame(el);                        }                    }                    if (options.on_frame && options.on_frame[$._spritely.instances[el_id]['current_frame']]) {                        options.on_frame[$._spritely.instances[el_id]['current_frame']](el);                    }                    if (options.rewind == true) {                        if ($._spritely.instances[el_id]['current_frame'] <= 0) {                            $._spritely.instances[el_id]['current_frame'] = frames.length - 1;                        } else {                            $._spritely.instances[el_id]['current_frame'] = $._spritely.instances[el_id]['current_frame'] - 1;                        };                    } else {                        if ($._spritely.instances[el_id]['current_frame'] >= frames.length - 1) {                            $._spritely.instances[el_id]['current_frame'] = 0;                        } else {                            $._spritely.instances[el_id]['current_frame'] = $._spritely.instances[el_id]['current_frame'] + 1;                        }                    }                    var yPos = $._spritely.getBgY(el);                    el.css('background-position', frames[$._spritely.instances[el_id]['current_frame']] + 'px ' + yPos);                    if (options.bounce && options.bounce[0] > 0 && options.bounce[1] > 0) {                        var ud = options.bounce[0]; // up-down                        var lr = options.bounce[1]; // left-right                        var ms = options.bounce[2]; // milliseconds                        el                            .animate({top: '+=' + ud + 'px', left: '-=' + lr + 'px'}, ms)                            .animate({top: '-=' + ud + 'px', left: '+=' + lr + 'px'}, ms);                    }                }                if ($._spritely.instances[el_id]['remaining_frames'] && $._spritely.instances[el_id]['remaining_frames'] > 0) {                    $._spritely.instances[el_id]['remaining_frames'] --;                    if ($._spritely.instances[el_id]['remaining_frames'] == 0) {                        $._spritely.instances[el_id]['remaining_frames'] = -1;                        delete $._spritely.instances[el_id]['remaining_frames'];                        return this;                    } else {                        animate(el);                    }                } else if ($._spritely.instances[el_id]['remaining_frames'] != -1) {                    animate(el);                }            } else if (options.type == 'pan') {                if (!$._spritely.instances[el_id]['_stopped']) {                    // As we pan, reduce the offset to the smallest possible                    // value to ease the load on the browser. This step is                    // skipped if the image hasn't loaded yet.                    var speed = options.speed || 1,                        start_x = $._spritely.instances[el_id]['l'] || parseInt($._spritely.getBgX(el).replace('px', ''), 10) || 0,                        start_y = $._spritely.instances[el_id]['t'] || parseInt($._spritely.getBgY(el).replace('px', ''), 10) || 0;                    if (options.do_once && !$._spritely.instances[el_id].remaining_frames || $._spritely.instances[el_id].remaining_frames <= 0) {                        switch(options.dir) {                            case 'up':                            case 'down':                                $._spritely.instances[el_id].remaining_frames = Math.floor((options.img_height || 0) / speed);                                break;                            case 'left':                            case 'right':                                $._spritely.instances[el_id].remaining_frames = Math.floor((options.img_width || 0) / speed);                                break;                        }                        $._spritely.instances[el_id].remaining_frames++;                    } else if (options.do_once) {                        $._spritely.instances[el_id].remaining_frames--;                    }                    switch (options.dir) {                        case 'up':                            speed *= -1;                        case 'down':                            if (!$._spritely.instances[el_id]['l'])                                $._spritely.instances[el_id]['l'] = start_x;                            $._spritely.instances[el_id]['t'] = start_y + speed;                            if (options.img_height)                                $._spritely.instances[el_id]['t'] %= options.img_height;                            break;                        case 'left':                            speed *= -1;                        case 'right':                            if (!$._spritely.instances[el_id]['t'])                                $._spritely.instances[el_id]['t'] = start_y;                            $._spritely.instances[el_id]['l'] = start_x + speed;                            if (options.img_width)                                $._spritely.instances[el_id]['l'] %= options.img_width;                            break;                    }                    // When assembling the background-position string, care must be taken                    // to ensure correct formatting.                    var bg_left = $._spritely.instances[el_id]['l'].toString();                    if (bg_left.indexOf('%') == -1) {                        bg_left += 'px ';                    } else {                        bg_left += ' ';                    }                    var bg_top = $._spritely.instances[el_id]['t'].toString();                    if (bg_top.indexOf('%') == -1) {                        bg_top += 'px ';                    } else {                        bg_top += ' ';                    }                    $(el).css('background-position', bg_left + bg_top);                    if (options.do_once && !$._spritely.instances[el_id].remaining_frames) {                        return this;                    }                }            }            $._spritely.instances[el_id]['options'] = options;            $._spritely.instances[el_id]['timeout'] = window.setTimeout(function() {                $._spritely.animate(options);            }, parseInt(1000 / options.fps));        },        randomIntBetween: function(lower, higher) {            return parseInt(rand_no = Math.floor((higher - (lower - 1)) * Math.random()) + lower);        },        getBgUseXY: (function() {            try {                return typeof $('body').css('background-position-x') == 'string';            } catch(e) {                return false;            }        })(),        getBgY: function(el) {            if ($._spritely.getBgUseXY) {                return $(el).css('background-position-y') || '0';            } else {                return ($(el).css('background-position') || ' ').split(' ')[1];            }        },        getBgX: function(el) {            if ($._spritely.getBgUseXY) {                return $(el).css('background-position-x') || '0';            } else {                return ($(el).css('background-position') || ' ').split(' ')[0];            }        },        get_rel_pos: function(pos, w) {            // return the position of an item relative to a background            // image of width given by w            var r = pos;            if (pos < 0) {                while (r < 0) {                    r += w;                }            } else {                while (r > w) {                    r -= w;                }            }            return r;        },        _spStrip: function(s, chars) {            // Strip any character in 'chars' from the beginning or end of            // 'str'. Like Python's .strip() method, or jQuery's $.trim()            // function (but allowing you to specify the characters).            while (s.length) {                var i, sr, nos = false, noe = false;                for (i=0;i
-1) s = sr; else nos = true; } for (i=0;i
-1) s = sr; else noe = true; } if (nos && noe) return s; } return ''; } }; $.fn.extend({ spritely: function(options) { var $this = $(this), el_id = $this.attr('id'), options = $.extend({ type: 'sprite', do_once: false, width: null, height: null, img_width: 0, img_height: 0, fps: 12, no_of_frames: 2, play_frames: 0 }, options || {}), background_image = (new Image()), background_image_src = $._spritely._spStrip($this.css('background-image') || '', 'url("); '); if (!$._spritely.instances[el_id]) { if (options.start_at_frame) { $._spritely.instances[el_id] = {current_frame: options.start_at_frame - 1}; } else { $._spritely.instances[el_id] = {current_frame: -1}; } } $._spritely.instances[el_id]['type'] = options.type; $._spritely.instances[el_id]['depth'] = options.depth; options.el = $this; options.width = options.width || $this.width() || 100; options.height = options.height || $this.height() || 100; background_image.onload = function() { options.img_width = background_image.width; options.img_height = background_image.height; options.img = background_image; var get_rate = function() { return parseInt(1000 / options.fps); } if (!options.do_once) { setTimeout(function() { $._spritely.animate(options); }, get_rate(options.fps)); } else { setTimeout(function() { $._spritely.animate(options); }, 0); } } background_image.src = background_image_src; return this; }, sprite: function(options) { var options = $.extend({ type: 'sprite', bounce: [0, 0, 1000] // up-down, left-right, milliseconds }, options || {}); return $(this).spritely(options); }, pan: function(options) { var options = $.extend({ type: 'pan', dir: 'left', continuous: true, speed: 1 // 1 pixel per frame }, options || {}); return $(this).spritely(options); }, flyToTap: function(options) { var options = $.extend({ el_to_move: null, type: 'moveToTap', ms: 1000, // milliseconds do_once: true }, options || {}); if (options.el_to_move) { $(options.el_to_move).active(); } if ($._spritely.activeSprite) { if (window.Touch) { // iphone method see http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone/9 or http://www.nimblekit.com/tutorials.html for clues... $(this)[0].ontouchstart = function(e) { var el_to_move = $._spritely.activeSprite; var touch = e.touches[0]; var t = touch.pageY - (el_to_move.height() / 2); var l = touch.pageX - (el_to_move.width() / 2); el_to_move.animate({ top: t + 'px', left: l + 'px' }, 1000); }; } else { $(this).click(function(e) { var el_to_move = $._spritely.activeSprite; $(el_to_move).stop(true); var w = el_to_move.width(); var h = el_to_move.height(); var l = e.pageX - (w / 2); var t = e.pageY - (h / 2); el_to_move.animate({ top: t + 'px', left: l + 'px' }, 1000); }); } } return this; }, // isDraggable requires jQuery ui isDraggable: function(options) { if ((!$(this).draggable)) { //console.log('To use the isDraggable method you need to load jquery-ui.js'); return this; } var options = $.extend({ type: 'isDraggable', start: null, stop: null, drag: null }, options || {}); var el_id = $(this).attr('id'); if (!$._spritely.instances[el_id]) { return this; } $._spritely.instances[el_id].isDraggableOptions = options; $(this).draggable({ start: function() { var el_id = $(this).attr('id'); $._spritely.instances[el_id].stop_random = true; $(this).stop(true); if ($._spritely.instances[el_id].isDraggableOptions.start) { $._spritely.instances[el_id].isDraggableOptions.start(this); } }, drag: options.drag, stop: function() { var el_id = $(this).attr('id'); $._spritely.instances[el_id].stop_random = false; if ($._spritely.instances[el_id].isDraggableOptions.stop) { $._spritely.instances[el_id].isDraggableOptions.stop(this); } } }); return this; }, active: function() { // the active sprite $._spritely.activeSprite = this; return this; }, activeOnClick: function() { // make this the active script if clicked... var el = $(this); if (window.Touch) { // iphone method see http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone/9 or http://www.nimblekit.com/tutorials.html for clues... el[0].ontouchstart = function(e) { $._spritely.activeSprite = el; }; } else { el.click(function(e) { $._spritely.activeSprite = el; }); } return this; }, spRandom: function(options) { var options = $.extend({ top: 50, left: 50, right: 290, bottom: 320, speed: 4000, pause: 0 }, options || {}); var el_id = $(this).attr('id'); if (!$._spritely.instances[el_id]) { return this; } if (!$._spritely.instances[el_id].stop_random) { var r = $._spritely.randomIntBetween; var t = r(options.top, options.bottom); var l = r(options.left, options.right); $('#' + el_id).animate({ top: t + 'px', left: l + 'px' }, options.speed) } window.setTimeout(function() { $('#' + el_id).spRandom(options); }, options.speed + options.pause) return this; }, makeAbsolute: function() { // remove an element from its current position in the DOM and // position it absolutely, appended to the body tag. return this.each(function() { var el = $(this); var pos = el.position(); el.css({position: "absolute", marginLeft: 0, marginTop: 0, top: pos.top, left: pos.left }) .remove() .appendTo("body"); }); }, spSet: function(prop_name, prop_value) { var el_id = $(this).attr('id'); $._spritely.instances[el_id][prop_name] = prop_value; return this; }, spGet: function(prop_name, prop_value) { var el_id = $(this).attr('id'); return $._spritely.instances[el_id][prop_name]; }, spStop: function(bool) { this.each(function() { var $this = $(this), el_id = $this.attr('id'); if ($._spritely.instances[el_id]['options']['fps']) { $._spritely.instances[el_id]['_last_fps'] = $._spritely.instances[el_id]['options']['fps']; } if ($._spritely.instances[el_id]['type'] == 'sprite') { $this.spSet('fps', 0); } $._spritely.instances[el_id]['_stopped'] = true; $._spritely.instances[el_id]['_stopped_f1'] = bool; if (bool) { // set background image position to 0 var bp_top = $._spritely.getBgY($(this)); $this.css('background-position', '0 ' + bp_top); } }); return this; }, spStart: function() { $(this).each(function() { var el_id = $(this).attr('id'); var fps = $._spritely.instances[el_id]['_last_fps'] || 12; if ($._spritely.instances[el_id]['type'] == 'sprite') { $(this).spSet('fps', fps); } $._spritely.instances[el_id]['_stopped'] = false; }); return this; }, spToggle: function() { var el_id = $(this).attr('id'); var stopped = $._spritely.instances[el_id]['_stopped'] || false; var stopped_f1 = $._spritely.instances[el_id]['_stopped_f1'] || false; if (stopped) { $(this).spStart(); } else { $(this).spStop(stopped_f1); } return this; }, fps: function(fps) { $(this).each(function() { $(this).spSet('fps', fps); }); return this; }, goToFrame: function(n) { var el_id = $(this).attr('id'); if ($._spritely.instances && $._spritely.instances[el_id]) { $._spritely.instances[el_id]['current_frame'] = n - 1; } return this; }, spSpeed: function(speed) { $(this).each(function() { $(this).spSet('speed', speed); }); return this; }, spRelSpeed: function(speed) { $(this).each(function() { var rel_depth = $(this).spGet('depth') / 100; $(this).spSet('speed', speed * rel_depth); }); return this; }, spChangeDir: function(dir) { $(this).each(function() { $(this).spSet('dir', dir); }); return this; }, spState: function(n) { $(this).each(function() { // change state of a sprite, where state is the vertical // position of the background image (e.g. frames row) var yPos = ((n - 1) * $(this).height()) + 'px'; var xPos = $._spritely.getBgX($(this)); var bp = xPos + ' -' + yPos; $(this).css('background-position', bp); }); return this; }, lockTo: function(el, options) { $(this).each(function() { var el_id = $(this).attr('id'); if (!$._spritely.instances[el_id]) { return this; } $._spritely.instances[el_id]['locked_el'] = $(this); $._spritely.instances[el_id]['lock_to'] = $(el); $._spritely.instances[el_id]['lock_to_options'] = options; $._spritely.instances[el_id]['interval'] = window.setInterval(function() { if ($._spritely.instances[el_id]['lock_to']) { var locked_el = $._spritely.instances[el_id]['locked_el']; var locked_to_el = $._spritely.instances[el_id]['lock_to']; var locked_to_options = $._spritely.instances[el_id]['lock_to_options']; var locked_to_el_w = locked_to_options.bg_img_width; var locked_to_el_h = locked_to_el.height(); var locked_to_el_y = $._spritely.getBgY(locked_to_el); var locked_to_el_x = $._spritely.getBgX(locked_to_el); var el_l = (parseInt(locked_to_el_x) + parseInt(locked_to_options['left'])); var el_t = (parseInt(locked_to_el_y) + parseInt(locked_to_options['top'])); el_l = $._spritely.get_rel_pos(el_l, locked_to_el_w); $(locked_el).css({ 'top': el_t + 'px', 'left': el_l + 'px' }); } }, options.interval || 20); }); return this; }, destroy: function() { var el = $(this); var el_id = $(this).attr('id'); if ($._spritely.instances[el_id] && $._spritely.instances[el_id]['timeout']){ window.clearTimeout($._spritely.instances[el_id]['timeout']); } if ($._spritely.instances[el_id] && $._spritely.instances[el_id]['interval']) { window.clearInterval($._spritely.instances[el_id]['interval']); } delete $._spritely.instances[el_id] return this; } })})(jQuery);// Stop IE6 re-loading background images continuouslytry { document.execCommand("BackgroundImageCache", false, true);} catch(err) {}
View Code

 

index.html

    
Document

 

 

转载于:https://www.cnblogs.com/CyLee/p/9991010.html

你可能感兴趣的文章
学习笔记 124: 预备知识总结
查看>>
windows server之AD(1)
查看>>
如何升级PowerShell
查看>>
oracle kill所有plsql developer进程
查看>>
python实现登录查询(可以模糊查询)
查看>>
LAMP架构(apache用户认证,域名重定向,apache访问日志)
查看>>
struts2.0的json操作
查看>>
SQL注入神器——sqlmap
查看>>
Unity导航 (寻路系统Nav Mesh Agent)
查看>>
SaltStack配置语法-YAML和Jinja
查看>>
运用免费OA让你有意想不到的效果
查看>>
一些软件设计软则
查看>>
Linux运维基础命令
查看>>
使用PowerShell配置IP地址
查看>>
第十一章 MySQL运算符
查看>>
JAVA常见算法题(十七)
查看>>
GUI鼠标相关设置
查看>>
使用 <Iframe>实现跨域通信
查看>>
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>