﻿//转换滤镜类
//一般不需要关心它的两个成员变量，而应注意其成员函数
//SetAs... 成员函数设置当前滤镜对象为哪一种滤镜
//参数 duration 为转换完成所用的时间，单位秒，精度毫秒
//filterStr 用于 CSS 的滤镜字符串
//filterName 滤镜名称，一般为 filterStr 的一部分
function Filter()
{
    this.filterStr = "";
    this.filterName = "";
    
    //用模拟开关门效果转换对象内容
    //orientation 滤镜效果模拟的开关门是横向的还是纵向的，有效值如下：
    //vertical 纵向
    //horizontal 横向
    //motion 对象的新内容是先从外显示还是先从内显示，有效值如下：
    //out 转换从对象的中心向四边进行
    //in 转换从对象的四边向中心进行
    this.SetAsBarn = function (duration, orientation, motion)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Barn(" +
                         "enabled=false, duration=" + duration + ", orientation=" + orientation + ", motion=" + motion + ")";
        this.filterName = "DXImageTransform.Microsoft.Barn";
    }
    
    //用渐隐效果转换对象内容
    this.SetAsBlendTrans = function (duration)
    {
        this.filterStr = "BlendTrans(" +
                         "duration=" + duration + ")";
        this.filterName = "BlendTrans";
    }
    
    //用百叶窗开关效果转换对象内容
    //bands 滤镜效果中有多少条百叶窗的窗格出现，有效值 [1 - 100]
    //direction 百叶窗开关的方向，有效值如下：
    //down 向下
    //up 向上
    //right 向右
    //left 向左
    this.SetAsBlinds = function (duration, bands, direction)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Blinds(" +
                         "enabled=false, duration=" + duration + ", bands=" + bands　+ ", direction=" + direction + ")";
        this.filterName = "DXImageTransform.Microsoft.Blinds";
    }
    
    //用类似国际象棋棋盘的网格推拉效果转换对象内容
    //squaresX 滤镜效果中横向有多少条，有效值 >=2，推荐值 12
    //squaresY 滤镜效果中纵向有多少条，有效值 >=2，推荐值 12
    //direction 转换效果的方向，有效值如下：
    //down 向下
    //up 向上
    //right 向右
    //left 向左
    this.SetAsCheckerBoard = function (duration, squaresX, squaresY, direction)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.CheckerBoard(" +
                         "enabled=false, duration=" + duration +
                         ", squaresX=" + squaresX + ", squaresY=" + squaresY + ", direction=" + direction + ")";
        this.filterName = "DXImageTransform.Microsoft.CheckerBoard";
    }
    
    //用渐隐效果转换对象内容
    //overlap 在转换过程中源内容和目标内容同时显示的时间占 duration 的比例，有效值 [0.0 - 1.0]
    this.SetAsFade = function (duration, overlap)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Fade(" +
                         "enabled=false, duration=" + duration + ", overlap=" + overlap　+ ")";
        this.filterName = "DXImageTransform.Microsoft.Fade";
    }
    
    //用滚动渐隐效果转换对象内容
    //gradientSize 对象内容被梯度渐隐条覆盖的百分比，有效值 [0.0 - 1.0]，推荐值 0.25
    //wipeStyle 渐隐滚动条的方向，有效值如下：
    //0 转换在水平方向上自左至右
    //1 转换在垂直方向上自上至下
    //motion 对象内容出现的方向是依据 wipeStyle 特性的设定还是取反
    //forward 对象内容依据 wipeStyle 特性设定的流向出现
    //reverse 对象内容依据 wipeStyle 特性设定的流向的反方向出现
    this.SetAsGradientWipe = function (duration, gradientSize, wipeStyle, motion)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.GradientWipe(" +
                         "enabled=false, duration=" + duration + ", gradientSize=" + gradientSize +
                         ", wipeStyle=" + wipeStyle + ", motion=" + motion + ")";
        this.filterName = "DXImageTransform.Microsoft.GradientWipe";
    }
    
    //用对角扩张效果转换对象内容
    this.SetAsInset = function (duration)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Inset(" +
                         "enabled=false, duration=" + duration + ")";
        this.filterName = "DXImageTransform.Microsoft.Inset";
    }
    
    //用特殊形状剪切轮廓扩张或收缩显示效果转换对象内容
    //irisStyle 有效值如下：
    //PLUS 十字形
    //DIAMOND 菱形
    //CIRCLE 圆形
    //CROSS 交叉对角线形
    //SQUARE 矩形
    //STAR 星形
    //motion 新内容是先从外显示还是先从内显示，有效值如下：
    //out 转换从对象的中心向四边进行
    //in 转换从对象的四边向中心进行
    this.SetAsIris = function (duration, irisStyle, motion)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Iris(" +
                         "enabled=false, duration=" + duration + ", irisStyle=" + irisStyle + ", motion=" + motion + ")";
        this.filterName = "DXImageTransform.Microsoft.Iris";
    }
    
    //色块拼图效果
    //maxSquare 矩形色块的最大宽度，有效值 [2 - 50]
    this.SetAsPixelate = function (duration, maxSquare)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Pixelate(" +
                         "enabled=false, duration=" + duration + ", maxSquare=" + maxSquare + ")";
        this.filterName = "DXImageTransform.Microsoft.Pixelate";
    }
    
    //用放射状擦除效果转换对象内容
    //wipeStyle 所使用的擦除方式，有效值如下：
    //CLOCK 围绕对象的中心，自上方开始，顺时针旋转擦除
    //WEDGE 围绕对象的中心，自上方开始，同时向两边旋转擦除
    //RADIAL 以对象的左上角为圆心旋转擦除
    this.SetAsRadialWipe = function (duration, wipeStyle)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.RadialWipe(" +
                         "enabled=false, duration=" + duration + ", wipeStyle=" + wipeStyle + ")";
        this.filterName = "DXImageTransform.Microsoft.RadialWipe";
    }
    
    //用随机发生的线条转换对象内容
    //orientation 随机线条是横向的还是纵向的，有效值如下：
    //vertical 纵向
    //horizontal 横向
    this.SetAsRandomBars = function (duration, orientation)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.RandomBars(" +
                         "enabled=false, duration=" + duration + ", orientation=" + orientation + ")";
        this.filterName = "DXImageTransform.Microsoft.RandomBars";
    }
    
    //用随机像素溶解效果转换对象内容
    this.SetAsRandomDissolve = function (duration)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.RandomDissolve(" +
                         "enabled=false, duration=" + duration + ")";
        this.filterName = "DXImageTransform.Microsoft.RandomDissolve";
    }
    
    //提供了 23 种转换对象内容的效果
    //transition 转换所使用的方式，有效值如下：
    //0 矩形收缩转换
    //1 矩形扩张转换
    //2 圆形收缩转换
    //3 圆形扩张转换
    //4 向上擦除
    //5 向下擦除
    //6 向右擦除
    //7 向左擦除
    //8 纵向百叶窗转换
    //9 横向百叶窗转换
    //10 国际象棋棋盘横向转换
    //11 国际象棋棋盘纵向转换
    //12 随机杂点干扰转换
    //13 左右关门效果转换
    //14 左右开门效果转换
    //15 上下关门效果转换
    //16 上下开门效果转换
    //17 从右上角到左下角的锯齿边覆盖效果转换
    //18 从右下角到左上角的锯齿边覆盖效果转换
    //19 从左上角到右下角的锯齿边覆盖效果转换
    //20 从左下角到右上角的锯齿边覆盖效果转换
    //21 随机横线条转换
    //22 随机竖线条转换
    //23 随机使用上面可能的值转换
    this.SetAsRevealTrans = function (duration, transition)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.RevealTrans(" +
                         "duration=" + duration + ", transition=" + transition + ")";
        this.filterName = "DXImageTransform.Microsoft.RevealTrans";
    }
    
    //用滑条抽离效果转换对象内容
    //bands 有多少滑条被抽离，有效值 [1 - 100]
    //slideStyle 滑条抽离效果的方式，有效值如下：
    //HIDE 在新内容上抽离旧内容
    //PUSH 抽离旧内容时同步同向拉进新内容
    //SWAP 在抽离的同时交换新旧内容
    //推荐值 HIDE
    this.SetAsSlide = function (duration, bands, slideStyle)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Slide(" +
                         "enabled=false, duration=" + duration + ", bands=" + bands + ", slideStyle=" + slideStyle + ")";
        this.filterName = "DXImageTransform.Microsoft.Slide";
    }
    
    //用矩形螺旋方式转换对象内容
    //gridSizeX 滤镜效果中横向盘旋多少次，有效值 [1 - 100]，推荐值 16
    //gridSizeY 滤镜效果中纵向盘旋多少次，有效值 [1 - 100]，推荐值 16
    this.SetAsSpiral = function (duration, gridSizeX, gridSizeY)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Spiral(" +
                         "enabled=false, duration=" + duration +
                         ", gridSizeX=" + gridSizeX + ", gridSizeY=" + gridSizeY + ")";
        this.filterName = "DXImageTransform.Microsoft.Spiral";
    }
    
    //用拉伸(缩)变形效果转换对象内容
    //stretchStyle 拉伸变形转换的方式，有效值如下：
    //SPIN 在旧内容上自中心向左右两边拉伸新内容
    //HIDE 在旧内容上自左向右拉伸(缩)新内容
    //PUSH 自左向右拉伸新内容近来同时挤压旧内容出去。这种转换方式的视觉效果类似立方体从一面转到另一面
    //推荐值 SPIN
    this.SetAsStretch = function (duration, stretchStyle)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Stretch(" +
                         "enabled=false, duration=" + duration + ", stretchStyle=" + stretchStyle + ")";
        this.filterName = "DXImageTransform.Microsoft.Stretch";
    }
    
    //用锯齿边覆盖效果转换对象内容
    //motion 转换新内容从哪一个角开始，有效值如下：
    //leftdown 从左下角到右上角
    //leftup 从左上角到右下角
    //rightdown 从右下角到左上角
    //rightup 从右上角到左下角
    //推荐值 leftdown
    this.SetAsStrips = function (duration, motion)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Strips(" +
                         "enabled=false, duration=" + duration + ", motion=" + motion + ")";
        this.filterName = "DXImageTransform.Microsoft.Strips";
    }
    
    //用风车叶轮旋转效果转换对象内容
    //spokes 风车叶轮数目，有效值 [2 - 20]，推荐值 4
    this.SetAsWheel = function (duration, spokes)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Wheel(" +
                         "enabled=false, duration=" + duration + ", spokes=" + spokes + ")";
        this.filterName = "DXImageTransform.Microsoft.Wheel";
    }
    
    //用类似擦地板的效果转换对象内容
    //gridSizeX 滤镜效果中横向盘旋多少次，有效值 [1 - 100]，推荐值 16
    //gridSizeY 滤镜效果中纵向盘旋多少次，有效值 [1 - 100]，推荐值 16
    this.SetAsZigzag = function (duration, gridSizeX, gridSizeY)
    {
        this.filterStr = "progid:DXImageTransform.Microsoft.Zigzag(" +
                         "enabled=false, duration=" + duration +
                         ", gridSizeX=" + gridSizeX + ", gridSizeY=" + gridSizeY + ")";
        this.filterName = "DXImageTransform.Microsoft.Zigzag";
    }
}