这里说的滑移其实就是减速效果,能根据设定的坐标平面移动。
<script type=text/javascript> var $$ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; function Event(e){ var oEvent = document.all ? window.event : e; if (document.all) { oEvent.pageX = oEvent.clientX + document.documentElement.scrollLeft; oEvent.pageY = oEvent.clientY + document.documentElement.scrollTop; } return oEvent; } function addEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = fnHandler; } }; function removeEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = null; } }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } var Slippage = Class.create(); Slippage.prototype = { initialize: function(obj, options) { this.obj = $$(obj); this._timer =null; this._xs = this._ys = []; this.X = parseInt(this.obj.style.left) || 0; this.Y = parseInt(this.obj.style.top) || 0; this.SetOptions(options); this.Step = Math.abs(this.options.Step); this.Time = Math.abs(this.options.Time); this.Loop = this.options.Loop; this.Relative = this.options.Relative; this.SetPosition(this.options.X || [], this.options.Y || []); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 Step: 10,//滑动变化率 Time: 10,//滑动延时 X: [],//x坐标变化 Y: [],//y坐标变化 Loop: false,//是否循环 Relative: true//是否相对位置 }; Object.extend(this.options, options || {}); }, // SetPosition: function(arrX, arrY) { if(arrX.length <= 0 && arrX.length <= 0) return false; else if(arrX.length <= 0) arrX = [0]; else if(arrY.length <= 0) arrY = [0]; this._xs = arrX; this._ys = arrY; if(this.Relative){ for(var i in this._xs){ if (i == 0) { this._xs[0] += this.X; } else { this._xs[i] += this._xs[i-1]; } } for(var i in this._ys){ if (i == 0) { this._ys[0] += this.Y; } else { this._ys[i] += this._ys[i-1]; } } } this.Set(); }, // Set: function() { //当全部坐标指向同一个位置时会进入死循环 if(this._xs.length <= 0 && this._ys.length <= 0) return; if(this._xs.length > 0) this.X = this._xs.shift(); if(this._ys.length > 0) this.Y = this._ys.shift(); if(this.Loop && this._xs.length > 0 && this._ys.length > 0) { this._xs.push(this.X);this._ys.push(this.Y); } //$$("aa").innerHTML+=this._ys.length+"="; this.Move(this.X, this.Y); }, // Move: function(iX, iY) { clearTimeout(this._timer); 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); if (iLeftStep == 0 && iTopStep == 0) { this.Set(); } else { this.obj.style.left = (iLeft + iLeftStep) + "px"; this.obj.style.top = (iTop + iTopStep) + "px"; var oThis = this; this._timer = setTimeout(function(){ oThis.Move(iX, iY); }, this.Time); } }, // GetStep: function(iTarget, iNow) { var iStep = (iTarget - iNow) / this.Step; if (iStep == 0) return 0; if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1); return iStep; } }; </script> 效果
自动滑移:
定点滑移:(鼠标点击)
定线滑移:(鼠标拖动轨迹)
<script type=text/javascript> new Slippage("idSlippage3", { X: [200,200,0,-200,-100,-100], Y: [0,0,100,-100,100,-100], Loop: true }); var oSlippage = new Slippage("idSlippage"); $$("aa").onclick = function(e){ var oEvent = Event(e);oSlippage.Move(oEvent.pageX, oEvent.pageY);} var oSlippage2 = new Slippage("idSlippage2", { Step: 1, Relative: false }),x=[],y=[]; $$("bb").onmousedown = function(e){ addEventHandler(this, "mousemove", Set); } $$("bb").onmouseout = function(e){ removeEventHandler(this, "mousemove", Set); x=y=[];} $$("bb").onmouseup = function(e){ removeEventHandler(this, "mousemove", Set); oSlippage2.SetPosition(x, y);x=y=[];} function Set(e){ var oEvent = Event(e); x.push(oEvent.pageX); y.push(oEvent.pageY); } </script>
代码:
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=gb2312"
/>
<
title
>
滑移效果
</
title
>
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<
script
type
="text/javascript"
>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var $ = function (id)
{
return "string" == typeof id ? document.getElementById(id) : id;
};
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function Event(e)
{
var oEvent = document.all ? window.event : e;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (document.all)
{
oEvent.pageX = oEvent.clientX + document.documentElement.scrollLeft;
oEvent.pageY = oEvent.clientY + document.documentElement.scrollTop;
}
return oEvent;
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function addEventHandler(oTarget, sEventType, fnHandler)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (oTarget.addEventListener)
{
oTarget.addEventListener(sEventType, fnHandler, false);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else if (oTarget.attachEvent)
{
oTarget.attachEvent("on" + sEventType, fnHandler);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else
{
oTarget["on" + sEventType] = fnHandler;
}
};
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function removeEventHandler(oTarget, sEventType, fnHandler)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (oTarget.removeEventListener)
{
oTarget.removeEventListener(sEventType, fnHandler, false);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else if (oTarget.detachEvent)
{
oTarget.detachEvent("on" + sEventType, fnHandler);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else
{
oTarget["on" + sEventType] = null;
}
};
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var Class =
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
create: function()
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
return function()
{
this.initialize.apply(this, arguments);
}
}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Object.extend = function(destination, source)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (var property in source)
{
destination[property] = source[property];
}
return destination;
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
var Slippage = Class.create();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Slippage.prototype =
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
initialize: function(obj, options)
{
![](/Images/OutliningIndicators/InBlock.gif)
this.obj = $(obj);
this._timer =null;
this._xs = this._ys = [];
this.X = parseInt(this.obj.style.left) || 0;
this.Y = parseInt(this.obj.style.top) || 0;
this.SetOptions(options);
this.Step = Math.abs(this.options.Step);
this.Time = Math.abs(this.options.Time);
this.Loop = this.options.Loop;
this.Relative = this.options.Relative;
this.SetPosition(this.options.X || [], this.options.Y || []);
},
//设置默认属性
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
SetOptions: function(options)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
this.options =
{//默认值
Step: 10,//滑动变化率
Time: 10,//滑动延时
X: [],//x坐标变化
Y: [],//y坐标变化
Loop: false,//是否循环
Relative: true//是否相对位置
};
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Object.extend(this.options, options ||
{});
},
//
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
SetPosition: function(arrX, arrY)
{
if(arrX.length <= 0 && arrX.length <= 0) return false;
else if(arrX.length <= 0) arrX = [0];
else if(arrY.length <= 0) arrY = [0];
this._xs = arrX; this._ys = arrY;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this.Relative)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(var i in this._xs)
{ if (i == 0)
{ this._xs[0] += this.X; } else
{ this._xs[i] += this._xs[i-1]; } }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(var i in this._ys)
{ if (i == 0)
{ this._ys[0] += this.Y; } else
{ this._ys[i] += this._ys[i-1]; } }
}
this.Set();
},
//
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Set: function()
{
//当全部坐标指向同一个位置时会进入死循环
if(this._xs.length <= 0 && this._ys.length <= 0) return;
if(this._xs.length > 0) this.X = this._xs.shift();
if(this._ys.length > 0) this.Y = this._ys.shift();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(this.Loop && this._xs.length > 0 && this._ys.length > 0)
{ this._xs.push(this.X);this._ys.push(this.Y); }
//$("aa").innerHTML+=this._ys.length+"=";
this.Move(this.X, this.Y);
},
//
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Move: function(iX, iY)
{
clearTimeout(this._timer);
![](/Images/OutliningIndicators/InBlock.gif)
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);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (iLeftStep == 0 && iTopStep == 0)
{
this.Set();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else
{
this.obj.style.left = (iLeft + iLeftStep) + "px"; this.obj.style.top = (iTop + iTopStep) + "px";
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var oThis = this; this._timer = setTimeout(function()
{ oThis.Move(iX, iY); }, this.Time);
}
},
//
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
GetStep: function(iTarget, iNow)
{
var iStep = (iTarget - iNow) / this.Step;
if (iStep == 0) return 0;
if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1);
return iStep;
}
};
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
window.onload = function()
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
new Slippage("idSlippage3",
{ X: [200,200,0,-200,-100,-100], Y: [0,0,100,-100,100,-100], Loop: true });
var oSlippage = new Slippage("idSlippage");
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
$("aa").onclick = function(e)
{ var oEvent = Event(e);oSlippage.Move(oEvent.pageX, oEvent.pageY);}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var oSlippage2 = new Slippage("idSlippage2",
{ Step: 1, Relative: false }),x=[],y=[];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
$("bb").onmousedown = function(e)
{ addEventHandler(this, "mousemove", Set); }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
$("bb").onmouseout = function(e)
{ removeEventHandler(this, "mousemove", Set); x=y=[];}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
$("bb").onmouseup = function(e)
{ removeEventHandler(this, "mousemove", Set); oSlippage2.SetPosition(x, y);x=y=[];}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
function Set(e)
{ var oEvent = Event(e); x.push(oEvent.pageX); y.push(oEvent.pageY); }
}
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
</
script
>
</
head
>
<
body
>
自动滑移:
<
div
id
="cc"
style
="height:200px; width:500px; border:1px solid #000000; position:relative;overflow:hidden;"
>
<
div
id
="idSlippage3"
style
="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:50px; left:50px;"
>
</
div
>
</
div
>
定点滑移:(鼠标点击)
<
div
id
="aa"
style
="height:200px; width:500px; border:1px solid #000000; overflow:hidden;"
>
<
div
id
="idSlippage"
style
="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"
>
</
div
>
</
div
>
定线滑移:(鼠标拖动轨迹)
<
div
id
="bb"
style
="height:200px; width:500px; border:1px solid #000000; overflow:hidden;"
>
<
div
id
="idSlippage2"
style
="width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"
>
</
div
>
</
div
>
</
body
>
</
html
>
<script type=text/javascript> var $$ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; function Event(e){ var oEvent = document.all ? window.event : e; if (document.all) { oEvent.pageX = oEvent.clientX + document.documentElement.scrollLeft; oEvent.pageY = oEvent.clientY + document.documentElement.scrollTop; } return oEvent; } function addEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = fnHandler; } }; function removeEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = null; } }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } var Slippage = Class.create(); Slippage.prototype = { initialize: function(obj, options) { this.obj = $$(obj); this._timer =null; this._xs = this._ys = []; this.X = parseInt(this.obj.style.left) || 0; this.Y = parseInt(this.obj.style.top) || 0; this.SetOptions(options); this.Step = Math.abs(this.options.Step); this.Time = Math.abs(this.options.Time); this.Loop = this.options.Loop; this.Relative = this.options.Relative; this.SetPosition(this.options.X || [], this.options.Y || []); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 Step: 10,//滑动变化率 Time: 10,//滑动延时 X: [],//x坐标变化 Y: [],//y坐标变化 Loop: false,//是否循环 Relative: true//是否相对位置 }; Object.extend(this.options, options || {}); }, // SetPosition: function(arrX, arrY) { if(arrX.length <= 0 && arrX.length <= 0) return false; else if(arrX.length <= 0) arrX = [0]; else if(arrY.length <= 0) arrY = [0]; this._xs = arrX; this._ys = arrY; if(this.Relative){ for(var i in this._xs){ if (i == 0) { this._xs[0] += this.X; } else { this._xs[i] += this._xs[i-1]; } } for(var i in this._ys){ if (i == 0) { this._ys[0] += this.Y; } else { this._ys[i] += this._ys[i-1]; } } } this.Set(); }, // Set: function() { //当全部坐标指向同一个位置时会进入死循环 if(this._xs.length <= 0 && this._ys.length <= 0) return; if(this._xs.length > 0) this.X = this._xs.shift(); if(this._ys.length > 0) this.Y = this._ys.shift(); if(this.Loop && this._xs.length > 0 && this._ys.length > 0) { this._xs.push(this.X);this._ys.push(this.Y); } //$$("aa").innerHTML+=this._ys.length+"="; this.Move(this.X, this.Y); }, // Move: function(iX, iY) { clearTimeout(this._timer); 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); if (iLeftStep == 0 && iTopStep == 0) { this.Set(); } else { this.obj.style.left = (iLeft + iLeftStep) + "px"; this.obj.style.top = (iTop + iTopStep) + "px"; var oThis = this; this._timer = setTimeout(function(){ oThis.Move(iX, iY); }, this.Time); } }, // GetStep: function(iTarget, iNow) { var iStep = (iTarget - iNow) / this.Step; if (iStep == 0) return 0; if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1); return iStep; } }; </script> 效果
自动滑移:
<script type=text/javascript> new Slippage("idSlippage3", { X: [200,200,0,-200,-100,-100], Y: [0,0,100,-100,100,-100], Loop: true }); var oSlippage = new Slippage("idSlippage"); $$("aa").onclick = function(e){ var oEvent = Event(e);oSlippage.Move(oEvent.pageX, oEvent.pageY);} var oSlippage2 = new Slippage("idSlippage2", { Step: 1, Relative: false }),x=[],y=[]; $$("bb").onmousedown = function(e){ addEventHandler(this, "mousemove", Set); } $$("bb").onmouseout = function(e){ removeEventHandler(this, "mousemove", Set); x=y=[];} $$("bb").onmouseup = function(e){ removeEventHandler(this, "mousemove", Set); oSlippage2.SetPosition(x, y);x=y=[];} function Set(e){ var oEvent = Event(e); x.push(oEvent.pageX); y.push(oEvent.pageY); } </script>
代码:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/dot.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/dot.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)