天天看點

JavaScript 滑移效果

這裡說的滑移其實就是減速效果,能根據設定的坐标平面移動。 

效果

JavaScript 滑移效果

代碼:

JavaScript 滑移效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

JavaScript 滑移效果

<html xmlns="http://www.w3.org/1999/xhtml">

JavaScript 滑移效果

<head>

JavaScript 滑移效果

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

JavaScript 滑移效果

<title>滑移效果</title>

JavaScript 滑移效果

<script type="text/javascript">

JavaScript 滑移效果

var $ = function (id) {

JavaScript 滑移效果

    return "string" == typeof id ? document.getElementById(id) : id;

JavaScript 滑移效果

};

JavaScript 滑移效果
JavaScript 滑移效果

function Event(e){

JavaScript 滑移效果

    var oEvent = document.all ? window.event : e;

JavaScript 滑移效果

    if (document.all) {

JavaScript 滑移效果

        oEvent.pageX = oEvent.clientX + document.documentElement.scrollLeft;

JavaScript 滑移效果

        oEvent.pageY = oEvent.clientY + document.documentElement.scrollTop;

JavaScript 滑移效果

    }

JavaScript 滑移效果

    return oEvent;

JavaScript 滑移效果

}

JavaScript 滑移效果
JavaScript 滑移效果

function addEventHandler(oTarget, sEventType, fnHandler) {

JavaScript 滑移效果

    if (oTarget.addEventListener) {

JavaScript 滑移效果

        oTarget.addEventListener(sEventType, fnHandler, false);

JavaScript 滑移效果

    } else if (oTarget.attachEvent) {

JavaScript 滑移效果

        oTarget.attachEvent("on" + sEventType, fnHandler);

JavaScript 滑移效果

    } else {

JavaScript 滑移效果

        oTarget["on" + sEventType] = fnHandler;

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

function removeEventHandler(oTarget, sEventType, fnHandler) {

JavaScript 滑移效果

    if (oTarget.removeEventListener) {

JavaScript 滑移效果

        oTarget.removeEventListener(sEventType, fnHandler, false);

JavaScript 滑移效果

    } else if (oTarget.detachEvent) {

JavaScript 滑移效果

        oTarget.detachEvent("on" + sEventType, fnHandler);

JavaScript 滑移效果

    } else { 

JavaScript 滑移效果

        oTarget["on" + sEventType] = null;

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

var Class = {

JavaScript 滑移效果

  create: function() {

JavaScript 滑移效果

    return function() {

JavaScript 滑移效果

      this.initialize.apply(this, arguments);

JavaScript 滑移效果
JavaScript 滑移效果

  }

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

Object.extend = function(destination, source) {

JavaScript 滑移效果

    for (var property in source) {

JavaScript 滑移效果

        destination[property] = source[property];

JavaScript 滑移效果
JavaScript 滑移效果

    return destination;

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

var Slippage = Class.create();

JavaScript 滑移效果

Slippage.prototype = {

JavaScript 滑移效果

  initialize: function(obj, options) {

JavaScript 滑移效果
JavaScript 滑移效果

    this.obj = $(obj);

JavaScript 滑移效果

    this._timer =null;

JavaScript 滑移效果

    this._xs = this._ys = [];

JavaScript 滑移效果

    this.X = parseInt(this.obj.style.left) || 0;

JavaScript 滑移效果

    this.Y = parseInt(this.obj.style.top) || 0;

JavaScript 滑移效果
JavaScript 滑移效果

    this.SetOptions(options);

JavaScript 滑移效果

    this.Step = Math.abs(this.options.Step);

JavaScript 滑移效果

    this.Time = Math.abs(this.options.Time);

JavaScript 滑移效果

    this.Loop = this.options.Loop;

JavaScript 滑移效果

    this.Relative = this.options.Relative;

JavaScript 滑移效果
JavaScript 滑移效果

    this.SetPosition(this.options.X || [], this.options.Y || []);

JavaScript 滑移效果

  },

JavaScript 滑移效果

  //設定預設屬性

JavaScript 滑移效果

  SetOptions: function(options) {

JavaScript 滑移效果

    this.options = {//預設值

JavaScript 滑移效果

        Step:        10,//滑動變化率

JavaScript 滑移效果

        Time:        10,//滑動延時

JavaScript 滑移效果

        X:            [],//x坐标變化

JavaScript 滑移效果

        Y:            [],//y坐标變化

JavaScript 滑移效果

        Loop:        false,//是否循環

JavaScript 滑移效果

        Relative:    true//是否相對位置

JavaScript 滑移效果

    };

JavaScript 滑移效果

    Object.extend(this.options, options || {});

JavaScript 滑移效果
JavaScript 滑移效果

  //

JavaScript 滑移效果

  SetPosition: function(arrX, arrY) {

JavaScript 滑移效果

    if(arrX.length <= 0 && arrX.length <= 0) return false;

JavaScript 滑移效果

    else if(arrX.length <= 0) arrX = [0];

JavaScript 滑移效果

    else if(arrY.length <= 0) arrY = [0];

JavaScript 滑移效果
JavaScript 滑移效果

    this._xs = arrX; this._ys = arrY;

JavaScript 滑移效果
JavaScript 滑移效果

    if(this.Relative){

JavaScript 滑移效果

        for(var i in this._xs){ if (i == 0) { this._xs[0] += this.X; } else { this._xs[i] += this._xs[i-1]; } }

JavaScript 滑移效果

        for(var i in this._ys){ if (i == 0) { this._ys[0] += this.Y; } else { this._ys[i] += this._ys[i-1]; } }

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

    this.Set();

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

  Set: function() {

JavaScript 滑移效果

    //當全部坐标指向同一個位置時會進入死循環

JavaScript 滑移效果

    if(this._xs.length <= 0 && this._ys.length <= 0) return;

JavaScript 滑移效果
JavaScript 滑移效果

    if(this._xs.length > 0) this.X = this._xs.shift();

JavaScript 滑移效果

    if(this._ys.length > 0) this.Y = this._ys.shift();

JavaScript 滑移效果
JavaScript 滑移效果

    if(this.Loop && this._xs.length > 0 && this._ys.length > 0) { this._xs.push(this.X);this._ys.push(this.Y); }

JavaScript 滑移效果
JavaScript 滑移效果

    //$("aa").innerHTML+=this._ys.length+"=";

JavaScript 滑移效果

    this.Move(this.X, this.Y);

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

  Move: function(iX, iY) {

JavaScript 滑移效果

    clearTimeout(this._timer);

JavaScript 滑移效果
JavaScript 滑移效果

    var iLeft = parseInt(this.obj.style.left) || 0, iTop = parseInt(this.obj.style.top) || 0, iLeftStep = this.GetStep(iX, iLeft), iTopStep = this.GetStep(iY, iTop);

JavaScript 滑移效果
JavaScript 滑移效果

    if (iLeftStep == 0 && iTopStep == 0) {

JavaScript 滑移效果

        this.Set();

JavaScript 滑移效果
JavaScript 滑移效果

        this.obj.style.left = (iLeft + iLeftStep) + "px"; this.obj.style.top = (iTop + iTopStep) + "px";

JavaScript 滑移效果

        var oThis = this; this._timer = setTimeout(function(){ oThis.Move(iX, iY); }, this.Time);

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

  GetStep: function(iTarget, iNow) {

JavaScript 滑移效果

    var iStep = (iTarget - iNow) / this.Step;

JavaScript 滑移效果

    if (iStep == 0) return 0;

JavaScript 滑移效果

    if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1);

JavaScript 滑移效果

    return iStep;

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

window.onload = function(){

JavaScript 滑移效果

    new Slippage("idSlippage3", { X: [200,200,0,-200,-100,-100], Y: [0,0,100,-100,100,-100], Loop: true });

JavaScript 滑移效果
JavaScript 滑移效果

    var oSlippage = new Slippage("idSlippage");

JavaScript 滑移效果

    $("aa").onclick = function(e){ var oEvent = Event(e);oSlippage.Move(oEvent.pageX, oEvent.pageY);}

JavaScript 滑移效果
JavaScript 滑移效果

    var oSlippage2 = new Slippage("idSlippage2", { Step: 1, Relative: false }),x=[],y=[];

JavaScript 滑移效果

    $("bb").onmousedown = function(e){ addEventHandler(this, "mousemove", Set); }

JavaScript 滑移效果

    $("bb").onmouseout = function(e){ removeEventHandler(this, "mousemove", Set); x=y=[];}

JavaScript 滑移效果

    $("bb").onmouseup = function(e){ removeEventHandler(this, "mousemove", Set); oSlippage2.SetPosition(x, y);x=y=[];}

JavaScript 滑移效果

    function Set(e){ var oEvent = Event(e); x.push(oEvent.pageX); y.push(oEvent.pageY); }

JavaScript 滑移效果
JavaScript 滑移效果
JavaScript 滑移效果

</script>

JavaScript 滑移效果

</head>

JavaScript 滑移效果

<body>

JavaScript 滑移效果

自動滑移:

JavaScript 滑移效果

<div id="cc" style="height:200px; width:500px; border:1px solid #000000;  position:relative;overflow:hidden;">

JavaScript 滑移效果

  <div id="idSlippage3" style="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:50px; left:50px;"> </div>

JavaScript 滑移效果

</div>

JavaScript 滑移效果

定點滑移:(滑鼠點選)

JavaScript 滑移效果

<div id="aa" style="height:200px; width:500px; border:1px solid #000000; overflow:hidden;">

JavaScript 滑移效果

  <div id="idSlippage" style="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"> </div>

JavaScript 滑移效果
JavaScript 滑移效果

定線滑移:(滑鼠拖動軌迹)

JavaScript 滑移效果

<div id="bb" style="height:200px; width:500px; border:1px solid #000000; overflow:hidden;">

JavaScript 滑移效果

  <div id="idSlippage2" style="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"> </div>

JavaScript 滑移效果
JavaScript 滑移效果

</body>

JavaScript 滑移效果

</html>

JavaScript 滑移效果

繼續閱讀