精华内容
下载资源
问答
  • 如果用手机拍了一组张片,想要将这些静态图片合成动态的该怎么操作呢?将多张图片合成一张gif动图的方式,既能够占据更少的内存,还能够提升图片的趣味性,拥有更好的展示效果,简直是一举两得。接下来给大家分享下...

    如果用手机拍了一组张片,想要将这些静态图片合成动态的该怎么操作呢?将多张图片合成一张gif动图的方式,既能够占据更少的内存,还能够提升图片的趣味性,拥有更好的展示效果,简直是一举两得。接下来给大家分享下如何使用手机在线完成gif制作https://www.gif.cn/)图片合成,具体的操作步骤是怎样的,一起来看一下。

    打开手机自带浏览器或者其他下载的浏览器都可以,搜索gif中文网。

    在这里插入图片描述

    进入网站首页,点击“添加图片”,选择手机相册/文件管理中准备好的静态图片。

    在这里插入图片描述

    设置GIF动图的宽或者高,只需填写最重要的一项就可以了,另一项会自动计算生成。比如如下图所示,宽的要求是500像素,那么就填入500,另一项值自动生成,删除水印文字框中的链接,然后点击生成gif,即可下载无水印的动态图片。注意,图片质量越高,图片的清晰度越高,在生成之前还需要注意图片质量的选择。

    在这里插入图片描述

    gif在线生成之后,点击下载图片,浏览器会弹出“立即下载”的弹出框,点击下载,就可以完成使用手机来合成gif动图的操作。
    在这里插入图片描述

    展开全文
  • 合并成动态效果 核心思想为从我们的原始形态到最终态的两张静态图我们已经得到了。现在我们需要的是添加几张过渡态。在这里面有两种方式: - 将计算的各点偏移量进行按比例偏移,比如一共四张图合成...
  • 很多简短的视频也会被转换成动态 GIF 呈现,压缩画质和去除声音之后可以有效地减小文件大小。网络上不计其数的搞笑动图,几乎承载了网友大半的欢乐,但是也有人发现,将正常的动画倒序播放往往可以获得更搞笑的效果...
  • app 欢迎页的实现以及动画效果添加

    千次阅读 2018-04-12 13:22:14
    可以用静态图自己根据动态效果一些动画操作。实现效果图如下:一、实现思路看到这种动态效果,可以使用viewpager 来进行实现,再对viewpager适配器中的子控件进行补间动画的缩放效果。二、界面的布局效果&lt...

    最近公司app进行版本升级,这一版需要将欢迎页设置成动态的效果,ui直接给了gif图,但是gif图片太大,不太适合欢迎页来实现。。。可以用静态图自己根据动态效果来做一些动画操作。实现效果图如下:



    一、实现思路

    看到这种动态效果,可以使用viewpager 来进行实现,再对viewpager适配器中的子控件进行补间动画的缩放效果。

    二、界面的布局效果

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </android.support.v4.view.ViewPager>
    
        <LinearLayout
            android:id="@+id/ll_dots"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:gravity="center_horizontal"
            android:layout_marginBottom="31dp"
            android:paddingRight="@dimen/guide_dot_margin"
            android:orientation="horizontal"></LinearLayout>
    
        <ImageView
            android:id="@+id/iv_skip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:layout_marginTop="40dp"
            android:src="@drawable/skip" />
    
    </RelativeLayout>

    三、效果实现

    1、先动态的创建viewpager切换需要的view

     /**
         * 设置View布局
         */
        private void setGuideView() {
            views = new ArrayList();
            for (int position = 0; position < imgs.length; position++) {
                View view = View.inflate(this, R.layout.item_guide, null);
                ImageView ivBg = (ImageView) view.findViewById(R.id.iv_bg);
                ImageView ivTxt = (ImageView) view.findViewById(R.id.iv_txt);
                ImageView ivEnter = (ImageView) view.findViewById(R.id.iv_enter);
                ivBg.setImageResource(imgs[position]);
                views.add(view);
            }
        }

    2、创建适配器并添加动态创建的view

    public class GuideNewAdapter extends PagerAdapter {
        private final Context context;
        private List<View> views;
    
        public GuideNewAdapter(Context context, List<View> views) {
            this.context = context;
            this.views = views;
        }
    
        @Override
        public int getCount() {
            return views.size();
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(views.get(position));
            return views.get(position);
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(views.get(position));
        }
    }

    3、添加动画效果

    现在欢迎页也就有了静态的欢迎效果,我们需要在其中添加动画效果,这里我用了补间动画来实现,首先创建补间动画

    <?xml version="1.0" encoding="utf-8"?>
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fillAfter="true"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.3"
        android:toYScale="1.3"></scale>

    来进行放大的效果,其次需要将开始播放补间动画,添加这几句代码就可以实现

     ImageView imageview = (ImageView) views.get(position).findViewById(R.id.iv_bg);
            ScaleAnimation scaleAnimation = (ScaleAnimation) AnimationUtils.loadAnimation(this, R.anim.enlarge);
            imageview.startAnimation(scaleAnimation);

    viewpager每次滑动实现一次动画效果,需要给viewpager设置监听并且再监听中设置这个动画的播放。。。

    4、底部圆点的关联

    到了这里欢迎页滑动的动态效果基本已经实现了,还需要在底部设置滑动时的dot关联,这个需要用在界面布局中的ll_dots来进行动态创建小圆点,并且和viewpager滑动关联起来。首先先动态创建和viewpager滑动相关的圆点:

     /**
         * 动态添加点图
         */
        private void setDotsView() {
            for (int i = 0; i < views.size(); i++) {
                ImageView imageView = new ImageView(this);
                imageView.setImageResource(R.drawable.dots_selector);
                llDots.addView(imageView);
            }
        }

    目前已经能看见界面底部的圆点,现在需要把圆点和viewpager关联起来,还是在viewpager 的监听的onPageSelected(int pos)来进行关联设置:

     /**
         * 设置点图的状态切换
         *
         * @param position
         */
        private void scrollDotView(int position) {
            int childCount = llDots.getChildCount();
            for (int i = 0; i < childCount; i++) {
                ImageView imageview = (ImageView) llDots.getChildAt(i);
                if (i == position) {
                    imageview.setEnabled(true);
                } else {
                    imageview.setEnabled(false);
                }
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                layoutParams.leftMargin = UIUtils.getDimensResource(this, R.dimen.guide_dot_margin);
                imageview.setLayoutParams(layoutParams);
            }
        }

    目前来说欢迎页的效果基本实现了,不过圆点的关联得记得在界面默认设置position=0 的时候的点图状态切换scrollDotView(0)。

    完整代码地址:

    guide_app】https://github.com/cherry410/guide_app-master


    四、bug添加

        最近再做项目测试的时候发现一个问题,切换的底部导航小圆点在6.0以上的机型没有问题,但是在5.0的机型就会发现出现变形问题,最后发现添加

    <activity
        android:name=".ui.activity.GuideActivity"
        android:hardwareAccelerated="false"></activity>
    这个属性就解决这个问题,但是原因是什么,我还是不太清楚,有哪位大神知道可以分享下。。。


    展开全文
  • 游戏开发中常常会有精美的2D立绘...(当然可以用Spine等其它方式做成动图,但在本文讨论范围)。 gif图片数据丢失比较严重:细看可以看到,妹子衣服的摆动,水面的波纹,妹子眼珠的转动,前景树枝的摇曳,树枝后面...

    游戏开发中常常会有精美的2D立绘,这种2D立绘一般为一张静态贴图,图片精美,但看地来比较呆板,不够生动形象。基于此问题,我们可以开发自己的shader实现动态效果。

    如下图:左图为静态原始效果,右图为特殊渲染后的动态效果。(当然可以用Spine等其它方式做成动图,但在本文讨论范围)。

    gif图片数据丢失比较严重:细看可以看到,妹子衣服的摆动,水面的波纹,妹子眼珠的转动,前景树枝的摇曳,树枝后面光束的转动,扇子上面宝石的闪烁,等动态效果。

     


    实现原理为:给RawImage设置为自定义的材质(image_3d.shader),然后设置材质中的各个参数来实现动画。(Image3D.cs的作用也后面再介绍)

    image_3d.shader,实现了多种动化效果,并利用遮罩图片的rgb通道和配置参数来做为动画的参数输入。

     

    遮罩图片1(下左图)R:扇子上的光;G:水面;B:前景树枝

    遮罩图片2(下右图)R:妹子的衣服;G:妹子的头发;B:妹子的眼睛

    如果一张遮罩够用的话,最好只用一张遮罩会比较省。

    遮罩中的颜色的值比如: 遮罩2中的红色,会有比较明显的颜色浓度过度(其它也有),用于控制衣服摆动的幅度,比如衣服的边缘处摆动幅度大,红色就比较深。

    因为遮罩图层可能会有重叠。PS中遮罩层的图层要设置为“变亮“(如下图)。这样0XFF0000FF和0X009900FF混合后的颜色值会为0XFF9900FF,在shader中可以取到正确的值。PS图层中默认的”正常“在不同图层有重叠时会有最终颜色0XFF0000FF会把0X009900FF盖住,达不到我们要的效果。

    然后在片元着色器中做动画

    因为咱们要在材质球中编辑各个参数,所以用的是shader_feature而没用multi_compile

    下面代码为简单示例:

    fixed4 frag(v2f IN) : SV_Target
    	{
    		float2 mTexcoord = IN.texcoord;//原图的纹理坐标
    		fixed3 mask = tex2D(_Mask, mTexcoord).rgb;//遮罩图
    		mTexcoord += Wave(mTexcoord, _SpeedR, mask.r, _ParametersR);//用遮罩图的红色(mask.r)和其它参数(_SpeedR,_ParametersR )作为Wave函数的输入
    		half4 color = (tex2D(_MainTex, mTexcoord) + _TextureSampleAdd);
    		return color;
    	}

     动画函数举例:波动

    //params.x: 1,y方向的振幅
    	//params.y: 1,y方向的频率
    	//params.z: 1,x方向的振幅
    	//params.w: 1,x方向的频率
    	half2 Wave(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset;
    		half2 phase = (uv + speed * half2(_Time.y, _Time.y))* PI * 2;
    		offset.y = params.x * sin(params.y * phase.x);
    		offset.x = params.z * sin(params.w * phase.y);
    		offset = offset * concentration * 0.01;
    		return offset;
    	}

    因为image_3d.shader代码比较多,并且组合方式不一定是最适合您的,所以只建议参考。

    相关的资源:点击这里可以下载

    以上动画中的实际代码如下:(可用代码)

    // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
    
    Shader "mgo/image/image_3d"
    {
    	Properties
    	{
    		[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
    	_Color("Tint", Color) = (1,1,1,1)
    
    		_StencilComp("Stencil Comparison", Float) = 8
    		_Stencil("Stencil ID", Float) = 0
    		_StencilOp("Stencil Operation", Float) = 0
    		_StencilWriteMask("Stencil Write Mask", Float) = 255
    		_StencilReadMask("Stencil Read Mask", Float) = 255
    
    		_ColorMask("Color Mask", Float) = 15
    
    		[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
    
    		[Space(100)]
    	[Header(The following is editable content for card)]
    	[Toggle(_ENABLE_ANI)] _EnableAni("EnableAni", Int) = 0
    
    		[NoScaleOffset]
    	_Mask("Mask", 2D) = "white" {}
    	//[KeywordEnum(Null, ThreeD, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type_R("TypeR", Int) = 0
    	[KeywordEnum(Null, ThreeD, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type_R("TypeR", Int) = 0
    		_SpeedR("SpeedR", Range(-10,10)) = 1
    		_ParametersR("ParametersR", vector) = (1,1,1,1)
    
    		//[KeywordEnum(Null, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type_G("TypeG", Int) = 0
    		[KeywordEnum(Null, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type_G("TypeG", Int) = 0
    		_SpeedG("SpeedG", Range(-10,10)) = 1
    		_ParametersG("ParametersG", vector) = (1,1,1,1)
    
    		//[KeywordEnum(Null, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type_B("TypeB", Int) = 0
    		[KeywordEnum(Null, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type_B("TypeB", Int) = 0
    		_SpeedB("SpeedB", Range(-10,10)) = 1
    		_ParametersB("ParametersB", vector) = (1,1,1,1)
    
    
    		[NoScaleOffset]
    	_Mask2("Mask2", 2D) = "white" {}
    	//[KeywordEnum(Null, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type2_R("Type2R", Int) = 0
    	[KeywordEnum(Null, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type2_R("Type2R", Int) = 0
    		_Speed2R("Speed2R", Range(-10,10)) = 1
    		_Parameters2R("Parameters2R", vector) = (1,1,1,1)
    
    		//[KeywordEnum(Null, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type2_G("Type2G", Int) = 0
    		[KeywordEnum(Null, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type2_G("Type2G", Int) = 0
    		_Speed2G("Speed2G", Range(-10,10)) = 1
    		_Parameters2G("Parameters2G", vector) = (1,1,1,1)
    
    		//[KeywordEnum(Null, Wave, Flex, Move, Flash, Ripple, FlowLight, Spiral)] _Type2_B("Type2B", Int) = 0
    		[KeywordEnum(Null, Wave, Flex, Move, Flash, FlowLight, Ripple)] _Type2_B("Type2B", Int) = 0
    		_Speed2B("Speed2B", Range(-10,10)) = 1
    		_Parameters2B("Parameters2B", vector) = (1,1,1,1)
    
    
    		//--------------------------------------------
    		[Space(100)]
    	[Header(The following is editable content for effect)]
    	[Header(Please do not check the effect options you do not use such as EnableFx1 EnableFx2 EnableFx3 EnableFx4)]
    	[Toggle(_ENABLE_FX1)] _ENABLE_FX1("EnableFx1", Int) = 0
    		[Toggle(_ENABLE_FX2)] _ENABLE_FX2("EnableFx2", Int) = 0
    		[Toggle(_ENABLE_FX3)] _ENABLE_FX3("EnableFx3", Int) = 0
    		[Toggle(_ENABLE_FX4)] _ENABLE_FX4("EnableFx4", Int) = 0
    
    		[Header(effect 1 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz)]
    	_Fx1Tex("Fx1 Texture", 2D) = "white" {}
    	[KeywordEnum(NULL, MASK_R, MASK_G, MASK_B, MASK2_R, MASK2_G, MASK2_B)] _Fx1("Fx1 Mask Color", Int) = 0
    		[Toggle] _Fx1IsOneMinus("Fx1IsOneMinus", Int) = 0
    		_Fx1SpeedMove("Fx1SpeedMove", Range(-10,10)) = 0
    		_Fx1ParametersMove("Fx1ParametersMove", vector) = (1,1,1,1)
    		_Fx1SpeedWave("Fx1SpeedWave", Range(-10,10)) = 0
    		_Fx1ParametersWave("Fx1ParametersWave", vector) = (1,1,1,1)
    		_Fx1SpeedFlex("Fx1SpeedFlex", Range(-10,10)) = 0
    		_Fx1ParametersFlex("Fx1ParametersFlex", vector) = (1,1,1,1)
    		_Fx1SpeedSpiral("Fx1SpeedSpiral", Range(-10,10)) = 0
    		_Fx1ParametersSpiral("Fx1ParametersSpiral", vector) = (1,1,1,1)
    		_Fx1SpeedFrameAni("Fx1SpeedFrameAni", Range(-10,10)) = 0
    		_Fx1ParametersFrameAni("Fx1ParametersFrameAni", vector) = (1,1,1,1)
    		_Fx1SpeedFlash("Fx1SpeedFlash", Range(-10,10)) = 0
    		_Fx1ParametersFlash("Fx1ParametersFlash", vector) = (1,1,1,1)
    
    
    
    		[Space(50)]
    	[Header(effect 2 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz)]
    
    	_Fx2Tex("Fx2 Texture", 2D) = "white" {}
    	[KeywordEnum(NULL, MASK_R, MASK_G, MASK_B, MASK2_R, MASK2_G, MASK2_B)] _Fx2("Fx2 Mask Color", Int) = 0
    		[Toggle] _Fx2IsOneMinus("Fx2IsOneMinus", Int) = 0
    		_Fx2SpeedMove("Fx2SpeedMove", Range(-10,10)) = 0
    		_Fx2ParametersMove("Fx2ParametersMove", vector) = (1,1,1,1)
    		_Fx2SpeedWave("Fx2SpeedWave", Range(-10,10)) = 0
    		_Fx2ParametersWave("Fx2ParametersWave", vector) = (1,1,1,1)
    		_Fx2SpeedFlex("Fx2SpeedFlex", Range(-10,10)) = 0
    		_Fx2ParametersFlex("Fx2ParametersFlex", vector) = (1,1,1,1)
    		_Fx2SpeedSpiral("Fx2SpeedSpiral", Range(-10,10)) = 0
    		_Fx2ParametersSpiral("Fx2ParametersSpiral", vector) = (1,1,1,1)
    		_Fx2SpeedFrameAni("Fx2SpeedFrameAni", Range(-10,10)) = 0
    		_Fx2ParametersFrameAni("Fx2ParametersFrameAni", vector) = (1,1,1,1)
    		_Fx2SpeedFlash("Fx2SpeedFlash", Range(-10,10)) = 0
    		_Fx2ParametersFlash("Fx2ParametersFlash", vector) = (1,1,1,1)
    
    		[Space(50)]
    	[Header(effect 3 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz)]
    
    	_Fx3Tex("Fx3 Texture", 2D) = "white" {}
    	[KeywordEnum(NULL, MASK_R, MASK_G, MASK_B, MASK2_R, MASK2_G, MASK2_B)] _Fx3("Fx3 Mask Color", Int) = 0
    		[Toggle] _Fx3IsOneMinus("Fx3IsOneMinus", Int) = 0
    		_Fx3SpeedMove("Fx3SpeedMove", Range(-10,10)) = 0
    		_Fx3ParametersMove("Fx3ParametersMove", vector) = (1,1,1,1)
    		_Fx3SpeedWave("Fx3SpeedWave", Range(-10,10)) = 0
    		_Fx3ParametersWave("Fx3ParametersWave", vector) = (1,1,1,1)
    		_Fx3SpeedFlex("Fx3SpeedFlex", Range(-10,10)) = 0
    		_Fx3ParametersFlex("Fx3ParametersFlex", vector) = (1,1,1,1)
    		_Fx3SpeedSpiral("Fx3SpeedSpiral", Range(-10, 10)) = 0
    		_Fx3ParametersSpiral("Fx3ParametersSpiral", vector) = (1, 1, 1, 1)
    		_Fx3SpeedFrameAni("Fx3SpeedFrameAni", Range(-10, 10)) = 0
    		_Fx3ParametersFrameAni("Fx3ParametersFrameAni", vector) = (1, 1, 1, 1)
    		_Fx3SpeedFlash("Fx3SpeedFlash", Range(-10,10)) = 0
    		_Fx3ParametersFlash("Fx3ParametersFlash", vector) = (1,1,1,1)
    
    		[Space(50)]
    	[Header(effect 4 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz)]
    
    	_Fx4Tex("Fx4 Texture", 2D) = "white" {}
    	[KeywordEnum(NULL, MASK_R, MASK_G, MASK_B, MASK2_R, MASK2_G, MASK2_B)] _Fx3("Fx4 Mask Color", Int) = 0
    		[Toggle] _Fx4IsOneMinus("Fx4IsOneMinus", Int) = 0
    		_Fx4SpeedMove("Fx4SpeedMove", Range(-10,10)) = 0
    		_Fx4ParametersMove("Fx4ParametersMove", vector) = (1,1,1,1)
    		_Fx4SpeedWave("Fx4SpeedWave", Range(-10,10)) = 0
    		_Fx4ParametersWave("Fx4ParametersWave", vector) = (1,1,1,1)
    		_Fx4SpeedFlex("Fx4SpeedFlex", Range(-10,10)) = 0
    		_Fx4ParametersFlex("Fx4ParametersFlex", vector) = (1,1,1,1)
    		_Fx4SpeedSpiral("Fx4SpeedSpiral", Range(-10, 10)) = 0
    		_Fx4ParametersSpiral("Fx4ParametersSpiral", vector) = (1, 1, 1, 1)
    		_Fx4SpeedFrameAni("Fx4SpeedFrameAni", Range(-10, 10)) = 0
    		_Fx4ParametersFrameAni("Fx4ParametersFrameAni", vector) = (1, 1, 1, 1)
    		_Fx4SpeedFlash("Fx4SpeedFlash", Range(-10,10)) = 0
    		_Fx4ParametersFlash("Fx4ParametersFlash", vector) = (1,1,1,1)
    
    	}
    
    		SubShader
    	{
    		Tags
    	{
    		"Queue" = "Transparent"
    		"IgnoreProjector" = "True"
    		"RenderType" = "Transparent"
    		"PreviewType" = "Plane"
    		"CanUseSpriteAtlas" = "True"
    	}
    
    		Stencil
    	{
    		Ref[_Stencil]
    		Comp[_StencilComp]
    		Pass[_StencilOp]
    		ReadMask[_StencilReadMask]
    		WriteMask[_StencilWriteMask]
    	}
    
    		Cull Off
    		Lighting Off
    		ZWrite Off
    		ZTest[unity_GUIZTestMode]
    		Blend SrcAlpha OneMinusSrcAlpha
    		ColorMask[_ColorMask]
    
    		Pass
    	{
    		Name "Default"
    		CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
    #pragma target 2.0
    
    #include "UnityCG.cginc"
    #include "UnityUI.cginc"
    
    #pragma multi_compile __ UNITY_UI_CLIP_RECT
    #pragma multi_compile __ UNITY_UI_ALPHACLIP
    
    #pragma	shader_feature _ENABLE_ANI
    
    		//#pragma	shader_feature _TYPE_R_NULL _TYPE_R_THREED _TYPE_R_WAVE _TYPE_R_FLEX _TYPE_R_MOVE _TYPE_R_FLASH _TYPE_R_RIPPLE _TYPE_R_FLOWLIGHT _TYPE_R_SPIRAL
    		//#pragma	shader_feature _TYPE_G_NULL _TYPE_G_WAVE _TYPE_G_FLEX _TYPE_G_MOVE _TYPE_G_FLASH _TYPE_G_RIPPLE _TYPE_G_FLOWLIGHT _TYPE_G_SPIRAL
    		//#pragma	shader_feature _TYPE_B_NULL _TYPE_B_WAVE _TYPE_B_FLEX _TYPE_B_MOVE _TYPE_B_FLASH _TYPE_B_RIPPLE _TYPE_B_FLOWLIGHT _TYPE_B_SPIRAL
    		//#pragma	shader_feature _TYPE2_R_NULL _TYPE2_R_WAVE _TYPE2_R_FLEX _TYPE2_R_MOVE _TYPE2_R_FLASH _TYPE2_R_RIPPLE _TYPE2_R_FLOWLIGHT _TYPE2_R_SPIRAL
    		//#pragma	shader_feature _TYPE2_G_NULL _TYPE2_G_WAVE _TYPE2_G_FLEX _TYPE2_G_MOVE _TYPE2_G_FLASH _TYPE2_G_RIPPLE _TYPE2_G_FLOWLIGHT _TYPE2_G_SPIRAL
    		//#pragma	shader_feature _TYPE2_B_NULL _TYPE2_B_WAVE _TYPE2_B_FLEX _TYPE2_B_MOVE _TYPE2_B_FLASH _TYPE2_B_RIPPLE _TYPE2_B_FLOWLIGHT _TYPE2_B_SPIRAL
    
    #pragma	shader_feature _TYPE_R_NULL _TYPE_R_WAVE _TYPE_R_FLEX _TYPE_R_MOVE _TYPE_R_FLASH _TYPE_R_FLOWLIGHT _TYPE_R_RIPPLE _TYPE_R_THREED
    #pragma	shader_feature _TYPE_G_NULL _TYPE_G_WAVE _TYPE_G_FLEX _TYPE_G_MOVE _TYPE_G_FLASH _TYPE_G_FLOWLIGHT _TYPE_G_RIPPLE
    #pragma	shader_feature _TYPE_B_NULL _TYPE_B_WAVE _TYPE_B_FLEX _TYPE_B_MOVE _TYPE_B_FLASH _TYPE_B_FLOWLIGHT _TYPE_B_RIPPLE
    #pragma	shader_feature _TYPE2_R_NULL _TYPE2_R_WAVE _TYPE2_R_FLEX _TYPE2_R_MOVE _TYPE2_R_FLASH _TYPE2_R_FLOWLIGHT _TYPE2_R_RIPPLE
    #pragma	shader_feature _TYPE2_G_NULL _TYPE2_G_WAVE _TYPE2_G_FLEX _TYPE2_G_MOVE _TYPE2_G_FLASH _TYPE2_G_FLOWLIGHT _TYPE2_G_RIPPLE
    #pragma	shader_feature _TYPE2_B_NULL _TYPE2_B_WAVE _TYPE2_B_FLEX _TYPE2_B_MOVE _TYPE2_B_FLASH _TYPE2_B_FLOWLIGHT _TYPE2_B_RIPPLE
    
    #pragma	shader_feature _ENABLE_FX1
    #pragma	shader_feature _FX1_MASK_NULL _FX1_MASK_R _FX1_MASK_G _FX1_MASK_B _FX1_MASK2_R _FX1_MASK2_G _FX1_MASK2_B
    
    #pragma	shader_feature _ENABLE_FX2
    #pragma	shader_feature _FX2_MASK_NULL _FX2_MASK_R _FX2_MASK_G _FX2_MASK_B _FX2_MASK2_R _FX2_MASK2_G _FX2_MASK2_B
    
    #pragma	shader_feature _ENABLE_FX3
    #pragma	shader_feature _FX3_MASK_NULL _FX3_MASK_R _FX3_MASK_G _FX3_MASK_B _FX3_MASK2_R _FX3_MASK2_G _FX3_MASK2_B
    
    #pragma	shader_feature _ENABLE_FX4
    #pragma	shader_feature _FX4_MASK_NULL _FX4_MASK_R _FX4_MASK_G _FX4_MASK_B _FX4_MASK2_R _FX4_MASK2_G _FX4_MASK2_B
    
    
    #define PI 3.1415926
    
    		struct appdata_t
    	{
    		float4 vertex   : POSITION;
    		float4 color    : COLOR;
    		float2 texcoord : TEXCOORD0;
    		UNITY_VERTEX_INPUT_INSTANCE_ID
    	};
    
    	struct v2f
    	{
    		float4 vertex   : SV_POSITION;
    		fixed4 color : COLOR;
    		float2 texcoord  : TEXCOORD0;
    		float4 worldPosition : TEXCOORD1;
    #if _ENABLE_FX1
    		float2 fx1Texcoord  : TEXCOORD2;
    #endif
    #if _ENABLE_FX2
    		float2 fx2Texcoord  : TEXCOORD3;
    #endif
    #if _ENABLE_FX3
    		float2 fx3Texcoord  : TEXCOORD4;
    #endif
    #if _ENABLE_FX4
    		float2 fx4Texcoord  : TEXCOORD5;
    #endif
    		UNITY_VERTEX_OUTPUT_STEREO
    	};
    
    	sampler2D _MainTex;
    	fixed4 _Color;
    	fixed4 _TextureSampleAdd;
    	float4 _ClipRect;
    	float4 _MainTex_ST;
    
    	uniform sampler2D _Mask;
    	uniform float4 _Mask_ST;
    	uniform float _SpeedR;
    	uniform float4 _ParametersR;
    	uniform float _SpeedG;
    	uniform float4 _ParametersG;
    	uniform float _SpeedB;
    	uniform float4 _ParametersB;
    
    	uniform sampler2D _Mask2;
    	uniform float4 _Mask2_ST;
    	uniform float _Speed2R;
    	uniform float4 _Parameters2R;
    	uniform float _Speed2G;
    	uniform float4 _Parameters2G;
    	uniform float _Speed2B;
    	uniform float4 _Parameters2B;
    
    
    	uniform sampler2D _Fx1Tex;
    	uniform float4 _Fx1Tex_ST;
    	uniform bool _Fx1IsOneMinus;
    	uniform float _Fx1SpeedMove;
    	uniform float4 _Fx1ParametersMove;
    	uniform float _Fx1SpeedWave;
    	uniform float4 _Fx1ParametersWave;
    	uniform float _Fx1SpeedFlex;
    	uniform float4 _Fx1ParametersFlex;
    	uniform float _Fx1SpeedSpiral;
    	uniform float4 _Fx1ParametersSpiral;
    	uniform float _Fx1SpeedFrameAni;
    	uniform float4 _Fx1ParametersFrameAni;
    	uniform float _Fx1SpeedFlash;
    	uniform float4 _Fx1ParametersFlash;
    
    	uniform sampler2D _Fx2Tex;
    	uniform float4 _Fx2Tex_ST;
    	uniform bool _Fx2IsOneMinus;
    	uniform float _Fx2SpeedMove;
    	uniform float4 _Fx2ParametersMove;
    	uniform float _Fx2SpeedWave;
    	uniform float4 _Fx2ParametersWave;
    	uniform float _Fx2SpeedFlex;
    	uniform float4 _Fx2ParametersFlex;
    	uniform float _Fx2SpeedSpiral;
    	uniform float4 _Fx2ParametersSpiral;
    	uniform float _Fx2SpeedFrameAni;
    	uniform float4 _Fx2ParametersFrameAni;
    	uniform float _Fx2SpeedFlash;
    	uniform float4 _Fx2ParametersFlash;
    
    	uniform sampler2D _Fx3Tex;
    	uniform float4 _Fx3Tex_ST;
    	uniform bool _Fx3IsOneMinus;
    	uniform float _Fx3SpeedMove;
    	uniform float4 _Fx3ParametersMove;
    	uniform float _Fx3SpeedWave;
    	uniform float4 _Fx3ParametersWave;
    	uniform float _Fx3SpeedFlex;
    	uniform float4 _Fx3ParametersFlex;
    	uniform float _Fx3SpeedSpiral;
    	uniform float4 _Fx3ParametersSpiral;
    	uniform float _Fx3SpeedFrameAni;
    	uniform float4 _Fx3ParametersFrameAni;
    	uniform float _Fx3SpeedFlash;
    	uniform float4 _Fx3ParametersFlash;
    
    	uniform sampler2D _Fx4Tex;
    	uniform float4 _Fx4Tex_ST;
    	uniform bool _Fx4IsOneMinus;
    	uniform float _Fx4SpeedMove;
    	uniform float4 _Fx4ParametersMove;
    	uniform float _Fx4SpeedWave;
    	uniform float4 _Fx4ParametersWave;
    	uniform float _Fx4SpeedFlex;
    	uniform float4 _Fx4ParametersFlex;
    	uniform float _Fx4SpeedSpiral;
    	uniform float4 _Fx4ParametersSpiral;
    	uniform float _Fx4SpeedFrameAni;
    	uniform float4 _Fx4ParametersFrameAni;
    	uniform float _Fx4SpeedFlash;
    	uniform float4 _Fx4ParametersFlash;
    
    
    	//函数定义区
    
    	//params.x: 自动情况下x方向移动的振幅
    	//params.y: 大于0表示开启自动3d运动 小于等于0用于手动拖动操作。
    	//params.z: 手动拖动操作时x方向的振幅
    	//params.w: 手动拖动操作时y方向的振幅
    	half2 ThreeD(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset;
    		if (params.y > 0)
    		{
    			half2 phase = (speed * _Time.y) * PI * 2;
    			offset.x = params.x * sin(phase);
    			offset.y = 0;
    		}
    		else
    		{
    			offset.x = params.z;
    			offset.y = params.w;
    		}
    		offset = offset * concentration * 0.01;
    		return offset;
    	}
    	//params.x: 1,y方向的振幅
    	//params.y: 1,y方向的频率
    	//params.z: 1,x方向的振幅
    	//params.w: 1,x方向的频率
    	half2 Wave(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset;
    		half2 phase = (uv + speed * half2(_Time.y, _Time.y))* PI * 2;
    		offset.y = params.x * sin(params.y * phase.x);
    		offset.x = params.z * sin(params.w * phase.y);
    		offset = offset * concentration * 0.01;
    		return offset;
    	}
    
    	//params.x: 1,x方向的振幅
    	//params.y: 1,x方向的频率
    	//params.z: 1,y方向的振幅
    	//params.w: 1,y方向的频率
    	half2 Flex(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset;
    		half2 phase = (uv + speed * half2(_Time.y, _Time.y))* PI * 2;
    		offset.x = params.x * sin(params.y * phase.x);
    		offset.y = params.z * sin(params.w * phase.y);
    		offset = offset * concentration * 0.01;
    		return offset;
    	}
    
    	//params.x: 1,x方向的速度
    	//params.y: 1,x方向的速度
    	//params.z: 0,useless
    	//params.w: 0,useless
    	half2 Move(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset;
    		half2 phase = speed * _Time.y;
    		offset.x = phase * params.x % 1;
    		offset.y = phase * params.y % 1;
    		return offset;
    	}
    	//params.x: 1,red
    	//params.y: 1,green
    	//params.z: 1,blue
    	//params.w: 0.2,最暗值
    	half3 Flash(float2 uv, float speed, float concentration, float4 params)
    	{
    		half3 color;
    		if (concentration > 0.01)
    		{
    			half2 phase = (speed * _Time.y) * PI * 2;
    			half light = saturate(lerp(params.w, 1, (sin(phase) + 1) * 0.5))  * concentration;
    			color = light * half3(params.x, params.y, params.z);
    		}
    		else
    		{
    			color = 0;
    		}
    		return color;
    	}
    	//params.x: 3,振幅
    	//params.y: 9,频率
    	//params.z: 0.5, 中心x
    	//params.w: 0.5, 中心y
    	half2 Ripple(float2 uv, float speed, float concentration, float4 params)
    	{
    		half dis = distance(float2(uv.x, uv.y * 1), params.zw);
    		half2 offset = saturate(1 - dis) * params.x * sin((dis * params.y + _Time.y * speed) * 2 * PI);
    		offset = offset * concentration * 0.01;
    		return offset;
    	}
    
    	//params.x: 0,光柱旋转角度
    	//params.y: 2,光柱频率(注意是否刷到目标位置)
    	//params.z: 0.2,光柱宽度(0~1)表示百分比
    	//params.w: 999900,光柱颜色(0~999999) red:990000 green:009900 blue:000099 yellow:999900 white:999999
    	half3 Flowlight(float2 uv, float speed, float concentration, float4 params)
    	{
    		//sampler2D fxTex, 
    		/*half2 offset;
    		offset.y = 0;
    		offset.x = (speed * _Time.y % 1 - 0.5) * params.x;
    		half3 color = tex2D(fxTex, uv + offset);
    		color = color * params.y * concentration;
    		return color;*/
    
    		half width = params.z;
    		half rotation = params.x * PI / 180;
    		half offset = (speed * _Time.y % 1 - 0.5) * params.y;
    		float s, c;
    		sincos(rotation, s, c);
    		float2x2 rotMatrix = float2x2(c, -s, s, c);
    		half2 fxUV = mul(uv, rotMatrix);
    
    		half3 color = 0;
    		if (fxUV.x > offset && fxUV.x < offset + width)
    		{
    			color = half3(params.w / 10000 % 100, params.w / 100 % 100, params.w % 100) * concentration * 0.05;
    			fixed dis = abs(offset + width * 0.5 - fxUV.x);
    			fixed featherWidth = 0.2;
    			if (dis > width * (0.5 - featherWidth))
    			{
    				color *= lerp(1, 0, (dis - width * (0.5 - featherWidth)) / (width * featherWidth));
    			}
    		}
    
    		return color;
    	}
    
    	//params.x: 0.5, 扭曲程度
    	//params.y: 1,	 中心扭曲加速度
    	//params.z: 0.5, 中心x
    	//params.w: 0.5, 中心y
    	half2 Spiral(float2 uv, float speed, float concentration, float4 params)
    	{
    		half dis = distance(uv.xy, params.zw);
    		float rotation = params.x * pow(dis, -params.y);
    		rotation += speed * _Time.y * 2 * PI;
    		float s, c;
    		sincos(rotation, s, c);
    		float2x2 rotMatrix = float2x2(c, -s, s, c);
    		half2 offset = mul(uv - params.zw, rotMatrix) + params.zw;
    		return offset;
    	}
    
    	//params.x: 4, 水平x方向有几个元素
    	//params.y: 4, 垂直y方向有几个元素
    	//params.z: 0, useless
    	//params.w: 0, useless
    	half2 FrameAni(float2 uv, float speed, float concentration, float4 params)
    	{
    		half2 offset = uv / params.xy;
    		fixed frame = floor(_Time.w * speed % (params.x * params.y));
    		fixed2 step = 1 / params.xy;
    		offset.x += (frame % params.x) * step.x;
    		offset.y += (1 - floor(frame / params.x) * step.y - step.y);
    		return offset;
    	}
    
    	v2f vert(appdata_t v)
    	{
    		v2f OUT;
    		UNITY_SETUP_INSTANCE_ID(v);
    		UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
    		OUT.worldPosition = v.vertex;
    		OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
    
    		OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
    #if _ENABLE_ANI
    #if _ENABLE_FX1
    		OUT.fx1Texcoord = TRANSFORM_TEX(v.texcoord, _Fx1Tex);
    #endif
    #if _ENABLE_FX2
    		OUT.fx2Texcoord = TRANSFORM_TEX(v.texcoord, _Fx2Tex);
    #endif
    #if _ENABLE_FX3
    		OUT.fx3Texcoord = TRANSFORM_TEX(v.texcoord, _Fx3Tex);
    #endif
    #if _ENABLE_FX4
    		OUT.fx4Texcoord = TRANSFORM_TEX(v.texcoord, _Fx4Tex);
    #endif
    #endif
    
    
    		OUT.color = v.color * _Color;
    		return OUT;
    	}
    
    	fixed4 frag(v2f IN) : SV_Target
    	{
    #if _ENABLE_ANI
    		fixed3 depth = tex2D(_Mask2, IN.texcoord).rgb;
    	float2 mTexcoord = IN.texcoord;
    	fixed4 mColor = IN.color;
    
    	fixed3 mask = tex2D(_Mask, mTexcoord).rgb;
    	fixed3 mask2 = tex2D(_Mask2, mTexcoord).rgb;
    	//threeD------------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_THREED
    	mTexcoord += ThreeD(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    
    	//wave------------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_WAVE
    	mTexcoord += Wave(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_G_WAVE
    	mTexcoord += Wave(mTexcoord, _SpeedG, mask.g, _ParametersG);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_B_WAVE
    	mTexcoord += Wave(mTexcoord, _SpeedB, mask.b, _ParametersB);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE2_R_WAVE
    	mTexcoord += Wave(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_WAVE
    	mTexcoord += Wave(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_WAVE
    	mTexcoord += Wave(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//flex------------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_FLEX
    	mTexcoord += Flex(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_G_FLEX
    	mTexcoord += Flex(mTexcoord, _SpeedG, mask.g, _ParametersG);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_B_FLEX
    	mTexcoord += Flex(mTexcoord, _SpeedB, mask.b, _ParametersB);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE2_R_FLEX
    	mTexcoord += Flex(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_FLEX
    	mTexcoord += Flex(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_FLEX
    	mTexcoord += Flex(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//move-----------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_MOVE
    	mTexcoord += Move(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_G_MOVE
    	mTexcoord += Move(mTexcoord, _SpeedG, mask.g, _ParametersG);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_B_MOVE
    	mTexcoord += Move(mTexcoord, _SpeedB, mask.b, _ParametersB);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE2_R_MOVE
    	mTexcoord += Move(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_MOVE
    	mTexcoord += Move(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_MOVE
    	mTexcoord += Move(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//flash-----------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_FLASH
    	mColor.rgb += Flash(mTexcoord, _SpeedR, mask.r, _ParametersR);
    #endif
    #if _TYPE_G_FLASH
    	mColor.rgb += Flash(mTexcoord, _SpeedG, mask.g, _ParametersG);
    #endif
    #if _TYPE_B_FLASH
    	mColor.rgb += Flash(mTexcoord, _SpeedB, mask.b, _ParametersB);
    #endif
    #if _TYPE2_R_FLASH
    	mColor.rgb += Flash(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_FLASH
    	mColor.rgb += Flash(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_FLASH
    	mColor.rgb += Flash(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//ripple------------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_G_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _SpeedG, mask.g, _ParametersG);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE_B_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _SpeedB, mask.b, _ParametersB);
    	mask2 = tex2D(_Mask2, mTexcoord).rgb;
    #endif
    #if _TYPE2_R_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_RIPPLE
    	mTexcoord += Ripple(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//flowlight------------------------------------------------------------------------------------------------------------------------------
    #if _TYPE_R_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _SpeedR, mask.r, _ParametersR);
    #endif
    #if _TYPE_G_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _SpeedG, mask.g, _ParametersG);
    #endif
    #if _TYPE_B_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _SpeedB, mask.b, _ParametersB);
    #endif
    #if _TYPE2_R_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    #endif
    #if _TYPE2_G_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    #endif
    #if _TYPE2_B_FLOWLIGHT
    	mColor.rgb += Flowlight(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    #endif
    
    	//
    	spiral------------------------------------------------------------------------------------------------------------------------------
    	//#if _TYPE_R_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _SpeedR, mask.r, _ParametersR);
    	//#endif
    	//#if _TYPE_G_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _SpeedG, mask.g, _ParametersG);
    	//#endif
    	//#if _TYPE_B_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _SpeedB, mask.b, _ParametersB);
    	//#endif
    	//#if _TYPE2_R_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _Speed2R, mask2.r, _Parameters2R);
    	//#endif
    	//#if _TYPE2_G_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _Speed2G, mask2.g, _Parameters2G);
    	//#endif
    	//#if _TYPE2_B_SPIRAL
    	//				mTexcoord += Spiral(mTexcoord, _Speed2B, mask2.b, _Parameters2B);
    	//#endif
    
    
    
    #if _ENABLE_FX1 || _ENABLE_FX2 || _ENABLE_FX3 || _ENABLE_FX4
    	float2 fxUV;
    	fixed3 fxColor;
    	float concentration;
    #endif
    
    #if _ENABLE_FX1_ENABLE_FX1 START
    #if _FX1_MASK_R
    	concentration = mask.r;
    #elif _FX1_MASK_G
    	concentration = mask.g;
    #elif _FX1_MASK_B
    	concentration = mask.b;
    #elif _FX1_MASK2_R
    	concentration = mask2.r;
    #elif _FX1_MASK2_G
    	concentration = mask2.g;
    #elif _FX1_MASK2_B
    	concentration = mask2.b;
    #elif _FX1_MASK_NULL
    	concentration = 1;
    #endif
    
    	if (_Fx1IsOneMinus)
    	{
    		concentration = 1 - concentration;
    	}
    	fxUV = IN.fx1Texcoord;
    	if (_Fx1SpeedMove != 0.0)
    	{
    		fxUV += Move(fxUV, _Fx1SpeedMove, 1, _Fx1ParametersMove);
    	}
    	if (_Fx1SpeedWave != 0.0)
    	{
    		fxUV += Wave(fxUV, _Fx1SpeedWave, 1, _Fx1ParametersWave);
    	}
    	if (_Fx1SpeedFlex != 0.0)
    	{
    		fxUV += Flex(fxUV, _Fx1SpeedFlex, 1, _Fx1ParametersFlex);
    	}
    	if (_Fx1SpeedSpiral != 0.0)
    	{
    		fxUV = Spiral(fxUV, _Fx1SpeedSpiral, 1, _Fx1ParametersSpiral);
    	}
    
    	if (_Fx1SpeedFrameAni != 0.0)
    	{
    		fxUV = FrameAni(fxUV, _Fx1SpeedFrameAni, 1, _Fx1ParametersFrameAni);
    	}
    
    
    
    	fxColor = tex2D(_Fx1Tex, fxUV).rgb * concentration;
    	if (_Fx1SpeedFlash != 0.0)
    	{
    		if (fxColor.r > 0.001 || fxColor.g > 0.001 || fxColor.b > 0.001)
    		{
    			fxColor.rgb *= Flash(fxUV, _Fx1SpeedFlash, 1, _Fx1ParametersFlash);
    		}
    	}
    	mColor.rgb += fxColor;
    #endif_ENABLE_FX1 END
    
    #if _ENABLE_FX2_ENABLE_FX2 START
    #if _FX2_MASK_R
    	concentration = mask.r;
    #elif _FX2_MASK_G
    	concentration = mask.g;
    #elif _FX2_MASK_B
    	concentration = mask.b;
    #elif _FX2_MASK2_R
    	concentration = mask2.r;
    #elif _FX2_MASK2_G
    	concentration = mask2.g;
    #elif _FX2_MASK2_B
    	concentration = mask2.b;
    #elif _FX2_MASK_NULL
    	concentration = 1;
    #endif
    	if (_Fx2IsOneMinus)
    	{
    		concentration = 1 - concentration;
    	}
    	fxUV = IN.fx2Texcoord;
    	if (_Fx2SpeedMove != 0.0)
    	{
    		fxUV += Move(fxUV, _Fx2SpeedMove, 1, _Fx2ParametersMove);
    	}
    	if (_Fx2SpeedWave != 0.0)
    	{
    		fxUV += Wave(fxUV, _Fx2SpeedWave, 1, _Fx2ParametersWave);
    	}
    	if (_Fx2SpeedFlex != 0.0)
    	{
    		fxUV += Flex(fxUV, _Fx2SpeedFlex, 1, _Fx2ParametersFlex);
    	}
    	if (_Fx2SpeedSpiral != 0.0)
    	{
    		fxUV = Spiral(fxUV, _Fx2SpeedSpiral, 1, _Fx2ParametersSpiral);
    	}
    
    	if (_Fx2SpeedFrameAni != 0.0)
    	{
    		fxUV = FrameAni(fxUV, _Fx2SpeedFrameAni, 1, _Fx2ParametersFrameAni);
    	}
    
    
    	fxColor = tex2D(_Fx2Tex, fxUV).rgb * concentration;
    
    	if (_Fx2SpeedFlash != 0.0)
    	{
    		if (fxColor.r > 0.001 || fxColor.g > 0.001 || fxColor.b > 0.001)
    		{
    			fxColor.rgb *= Flash(fxUV, _Fx2SpeedFlash, 1, _Fx2ParametersFlash);
    		}
    	}
    
    	mColor.rgb += fxColor;
    #endif_ENABLE_FX2 END
    
    #if _ENABLE_FX3_ENABLE_FX3 START
    #if _FX3_MASK_R
    	concentration = mask.r;
    #elif _FX3_MASK_G
    	concentration = mask.g;
    #elif _FX3_MASK_B
    	concentration = mask.b;
    #elif _FX3_MASK2_R
    	concentration = mask2.r;
    #elif _FX3_MASK2_G
    	concentration = mask2.g;
    #elif _FX3_MASK2_B
    	concentration = mask2.b;
    #elif _FX3_MASK_NULL
    	concentration = 1;
    #endif
    	if (_Fx3IsOneMinus)
    	{
    		concentration = 1 - concentration;
    	}
    	fxUV = IN.fx3Texcoord;
    	if (_Fx3SpeedMove != 0.0)
    	{
    		fxUV += Move(fxUV, _Fx3SpeedMove, 1, _Fx3ParametersMove);
    	}
    	if (_Fx3SpeedWave != 0.0)
    	{
    		fxUV += Wave(fxUV, _Fx3SpeedWave, 1, _Fx3ParametersWave);
    	}
    	if (_Fx3SpeedFlex != 0.0)
    	{
    		fxUV += Flex(fxUV, _Fx3SpeedFlex, 1, _Fx3ParametersFlex);
    	}
    	if (_Fx3SpeedSpiral != 0.0)
    	{
    		fxUV = Spiral(fxUV, _Fx3SpeedSpiral, 1, _Fx3ParametersSpiral);
    	}
    	if (_Fx3SpeedFrameAni != 0.0)
    	{
    		fxUV = FrameAni(fxUV, _Fx3SpeedFrameAni, 1, _Fx3ParametersFrameAni);
    	}
    
    	fxColor = tex2D(_Fx3Tex, fxUV).rgb * concentration;
    
    
    	if (_Fx3SpeedFlash != 0.0)
    	{
    		if (fxColor.r > 0.001 || fxColor.g > 0.001 || fxColor.b > 0.001)
    		{
    			fxColor.rgb *= Flash(fxUV, _Fx3SpeedFlash, 1, _Fx3ParametersFlash);
    		}
    	}
    	mColor.rgb += fxColor;
    #endif_ENABLE_FX3 END
    
    #if _ENABLE_FX4_ENABLE_FX4 START
    #if _FX4_MASK_R
    	concentration = mask.r;
    #elif _FX4_MASK_G
    	concentration = mask.g;
    #elif _FX4_MASK_B
    	concentration = mask.b;
    #elif _FX4_MASK2_R
    	concentration = mask2.r;
    #elif _FX4_MASK2_G
    	concentration = mask2.g;
    #elif _FX4_MASK2_B
    	concentration = mask2.b;
    #elif _FX4_MASK_NULL
    	concentration = 1;
    #endif
    	if (_Fx4IsOneMinus)
    	{
    		concentration = 1 - concentration;
    	}
    	fxUV = IN.fx4Texcoord;
    	if (_Fx4SpeedMove != 0.0)
    	{
    		fxUV += Move(fxUV, _Fx4SpeedMove, 1, _Fx4ParametersMove);
    	}
    	if (_Fx4SpeedWave != 0.0)
    	{
    		fxUV += Wave(fxUV, _Fx4SpeedWave, 1, _Fx4ParametersWave);
    	}
    	if (_Fx4SpeedFlex != 0.0)
    	{
    		fxUV += Flex(fxUV, _Fx4SpeedFlex, 1, _Fx4ParametersFlex);
    	}
    	if (_Fx4SpeedSpiral != 0.0)
    	{
    		fxUV = Spiral(fxUV, _Fx4SpeedSpiral, 1, _Fx4ParametersSpiral);
    	}
    
    	if (_Fx3SpeedFrameAni != 0.0)
    	{
    		fxUV = FrameAni(fxUV, _Fx4SpeedFrameAni, 1, _Fx4ParametersFrameAni);
    	}
    
    
    	fxColor = tex2D(_Fx4Tex, fxUV).rgb * concentration;
    
    	if (_Fx4SpeedFlash != 0.0)
    	{
    		if (fxColor.r > 0.001 || fxColor.g > 0.001 || fxColor.b > 0.001)
    		{
    			fxColor.rgb *= Flash(fxUV, _Fx4SpeedFlash, 1, _Fx4ParametersFlash);
    		}
    	}
    
    	mColor.rgb += fxColor;
    #endif_ENABLE_FX4 END
    
    
    
    
    	half4 color = (tex2D(_MainTex, mTexcoord) + _TextureSampleAdd) * mColor;
    
    #else
    		half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
    #endif
    
    
    #ifdef UNITY_UI_CLIP_RECT
    		color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
    #endif
    
    #ifdef UNITY_UI_ALPHACLIP
    		clip(color.a - 0.001);
    #endif
    
    		return color;
    	}
    		ENDCG
    	}
    	}
    }
    

     

    展开全文
  • 有时候网页,如果都写成静态的没有动态效果,犹如一张张图片,没有视觉感受,没有达到很好的视觉效果。 其实一些简单的CSS3动画,可以增添网页的动态感,使自己设计的网页更有视觉享受。1.图片有一定角度的旋转 ...

    有时候做网页,如果都写成静态的没有动态效果,犹如一张张图片,没有视觉感受,没有达到很好的视觉效果。

    其实一些简单的CSS3动画,可以增添网页的动态感,使自己设计的网页更有视觉享受。
    1.图片有一定角度的旋转

    代码实现:

    <!DOCTYPE html>
    <html>
    <head>
        <title>css3 animation</title>
        <style type="text/css">
        .animation{animation: myc 3s infinite;}
            @keyframes myc{
                50%{transform:rotate(-5deg);}
            }
            @-webkit-keyframes myc{
                50%{-webkit-transform:rotate(-5deg);}
            }
            @-o-keyframes myc{
                50%{-o-transform:rotate(-5deg);}
            }
    
    </style>
    
    </head>
    <body>
        <div class="animation">
        <img src="images/carton2.png"><br/>
        </div>
    </body>
    </html>

    3.实现图片上下运动

    <html>
        <style type="text/css">
        .ani{ -webkit-animation: khbtn 2s ease-in-out infinite ; animation: khbtn 2s ease-in-out infinite ; animation-fill-mode: forwards;}
    
    @-moz-keyframes khbtn{
        0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
        10%{-webkit-transform:translateY(-6px);-ms-transform:translateY(-6px);-o-transform:translateY(-6px);transform:translateY(-6px)}
        20%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
        100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
    }
    @-webkit-keyframes khbtn{
        0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
        10%{-webkit-transform:translateY(-6px);-ms-transform:translateY(-6px);-o-transform:translateY(-6px);transform:translateY(-6px)}
        20%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
        100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
    }
    @keyframes khbtn{
        0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)} 
        10%{-webkit-transform:translateY(-6px);-ms-transform:translateY(-6px);-o-transform:translateY(-6px);transform:translateY(-6px)}
         20%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
        100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}
         }
    </style>
    </html>
    <body>
    <img src="images/carton2.png" class="ani">
    </body>
    </html>

    4.实现小图片的晃动,可以用在网页中含有雪花,金币等,做一些小动画

    <!DOCTYPE html>
    <html>
    <head>
        <title>css3 animation</title>
        <style type="text/css">
    .icons .ico img { -webkit-animation: iconShake 2s infinite ease-in-out; animation: iconShake 2s infinite ease-in-out;    animation-fill-mode: initial; }
    .icons .ico.ic2 img { -webkit-animation-delay: .2s;animation-delay: .2s; }
    .icons .ico.ic3 img { -webkit-animation-delay: .4s;animation-delay: .4s; }
    .icons .ico.ic4 img { -webkit-animation-delay: .15s;animation-delay: .15s; }
    .icons .ico.ic5 img { -webkit-animation-delay: .3s;animation-delay: .3s; }
    .icons .ico.ic6 img { -webkit-animation-delay: .25s;animation-delay: .25s; }
    .icons .ico.ic7 img { -webkit-animation-delay: .35s;animation-delay: .35s; }
    
    
    @-moz-keyframes iconShake {
        0% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
        50% { -webkit-transform: translateY(-10px); -moz-transform: translateY(-10px); transform: translateY(-10px); }
        100% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
    }
    @-webkit-keyframes iconShake {
        0% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
        50% { -webkit-transform: translateY(-10px); -moz-transform: translateY(-10px); transform: translateY(-10px); }
        100% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
    }
    @keyframes iconShake {
        0% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
        50% { -webkit-transform: translateY(-10px); -moz-transform: translateY(-10px); transform: translateY(-10px); }
        100% { -webkit-transform: translateX(0) translateY(0); -moz-transform: translateX(0) translateY(0); transform: translateX(0) translateY(0); }
    }
        </style>
    
    </head>
    <body>
        <div class="icons">
                    <div class="ico ic1" style="opacity: 1; top: 0px;margin-left: 30px;"><img src="images/1.png" alt=""></div>
                    <div class="ico ic2" style="opacity: 1; top: 0px;margin-left: 100px;"><img src="images/2.png" alt=""></div>
                    <div class="ico ic3" style="opacity: 1; top: 0px;margin-left: 300px;"><img src="images/3.png" alt=""></div>
                    <div class="ico ic4" style="opacity: 1; top: 0px;margin-left: 50px;"><img src="images/4.png" alt=""></div>
                    <div class="ico ic5" style="opacity: 1; top: 0px;margin-left: 300px;"><img src="images/5.png" alt=""></div>
                    <div class="ico ic6" style="opacity: 1; top: 0px;margin-left: 10px;"><img src="images/6.png" alt=""></div>
                    <div class="ico ic7" style="opacity: 1; top: 0px;"><img src="images/7.png" alt=""></div>
    </div>
    </body>
    </html>

    5.大眼睛blink,blink眨

    这个没有用到CSS3动画,只用到了两张图片,用绝对定位把眼睛定位好即可

    <style>
    .blink{position: relative;}
    .eye{position: absolute;top: 35px;left: 20px;}        
    </style>    
    <div class="blink" >
    <img src="images/carton2.png" >
    <img src="images/blink.gif" class="eye">
    </div>

    6.动态的进度条和向上滚动的图片:
    进度条有一个小小的gif图片

     

    <!DOCTYPE html>
    <html>
    <head>
        <title>css3 animation</title>
        <style type="text/css">
    .percent .pbg{ border:1px solid #f1d99b; height: 13px; position: relative; border-radius: 12px; overflow: hidden;width: 200px; }
    .percent .pbg .bar{ width: 91.2%; position: absolute; height: 15px; left: -1px; top: -1px; overflow: hidden; }
    .percent .bar span{ display: block; background: url(images/percent.gif) 0 center repeat-x; height: 100%; position: relative; overflow: hidden; }
    .percent .bar span:after{ content: ''; display: block; width: 0; height: 0; border-style: solid; border-width: 14px; border-color: transparent #fff transparent transparent; position: absolute; right: 0; top: 0; z-index: 2; }
    .percent .bar span:before{ content: ''; display: block; position: absolute; right: 0; top: 0; z-index: 1; width: 25px; height: 13px; background: url(images/bar2.png) 0 0 no-repeat; }
    .percent .bar.ani span{ -webkit-animation: progressbar .8s ease-in-out; animation: progressbar .8s ease-in-out; animation-fill-mode: forwards;}
    @-moz-keyframes progressbar{    0%{width:0}    100%{width:100%}}
    @-webkit-keyframes progressbar{    0%{width:0}    100%{width:100%}}
    @keyframes progressbar{    0%{width:0}    100%{width:100%}}
    
    .animation-top{height: 37px;overflow: hidden;position: absolute;width: 25px;}
    .img1{height: 37px; position: absolute;-webkit-animation: anim1 5s linear infinite;}
    .img2{height: 37px; position: absolute; -webkit-animation: anim2 5s linear infinite;}
    @keyframes anim1{
            0% {top: 37px;opacity: 1}
            50% {top: -37px;opacity: 1}
            75% {top: -37px ;opacity: 0}
            100%{top:344px;opacity: 0}
    }
     @keyframes anim2{
            0% {top: -37px;opacity: 0;}
            50% {top: 37px;opacity: 0;}
            75% {top:37px ;opacity: 1;}
            100%{top:-37px;opacity: 1}
    } 
        </style>
    
    </head>
    <body>
    <div class="percent">
        <div class="pbg">
            <div class="bar ani" style="width: 62%; opacity: 1;"><span class=""></span></div>
            </div>
        </div>
    <div class="animation-top">
        <img class="img1" src="images/1.png"><br/>
        <img class="img2" src="images/2.png">
    </div>
    </body>
    </html>

    CSS3动画的语法:

    div{animation:myfirst(animation-name---动画的名字),5s(animation-duration---规定动画完成一个周期所花费的秒或毫秒),linear(animation-timing-function---规定动画的速度曲线),infinite(animation-iteration-count---规定动画被播放的次数),alternate(animation-direction---动画应该轮流反向播放))

    @keyframes myfirst //定义动画
    {
    0% {background:red; left:0px; top:0px;}
    25% {background:yellow; left:200px; top:0px;}
    50% {background:blue; left:200px; top:200px;}
    75% {background:green; left:0px; top:200px;}
    100% {background:red; left:0px; top:0px;}
    }

     

    转载于:https://www.cnblogs.com/cheryshi/p/8405296.html

    展开全文
  • 前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端开发可以保障实现这些效果的同时,即不能影响网站的打开速度、浏览器...
  • 主要功能:360°图片旋转,长图片横拉,静态图片做成动态,伪动图效果 参考案例:https://github.com/pisi/Reel 直接在github上下载,可以打开example文件内,查找适合自己的例子,进行改造。 使用方法: 首先要...
  • 前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端开发可以保障实现这些效果的同时,即不能影响网站...
  • 模板中的页面切换效果比焦点图切换更大气,切换的是整个网页,而不单单是图片,此特效就可做成一个企业或公司的网站,特别适合静态页内容不多的网站,如果你对WEB程序在行,你还可以扩展成动态交互的产品展示型网站...
  • 而前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端开发可以保障实现这些效果的同时,即不能影响网站的打开速度、...
  • JAVA前端开发

    2019-10-03 18:57:37
    而前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端开发可以保障实现这些效果的同时,即不能影响网站 的打开速度、...
  • Jana:由于静态图片传达信息的有限性,很多动态效果需要设计师通过添加设计说明并配合口述才能表达。这样的优点是节约时间,有助于实现快速迭代,成本较低;但这样的缺点是不够直观,很多细节存在于设计师自己的...
  • 互联网的高速发展促使...首先,学习之前要先了解前端是什么的,前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端...
  • 互联网的高速发展促使...首先,学习之前要先了解前端是什么的,前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端...
  • 互联网的高速发展促使...首先,学习之前要先了解前端是什么的,前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果等。而优秀的前端开...
  • 不管是web前端技术还是其他IT技术也好,其实都是从零基础开始学习的,你可以直接学习...前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换...
  • 用Python将GIF倒放

    千次阅读 2016-11-06 20:52:36
    GIF(Graphics Interchange Format) 是一种可以用来呈现动画效果图片格式,原理就是保存很多帧(Frame)静态图像,然后连续呈现。很多简短的视频也会被转换成动态 GIF 呈现,压缩画质和去除声音之后可以有效地...
  • 不管是web前端技术还是其他IT技术也好,其实都是从零基础开始学习的,你可以直接学习...前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、鼠标效果图片切换效果
  • listview+checkBox的全选,批量删除

    千次阅读 2016-04-24 12:07:59
    我在项目中是动态获取数据的,在这里就直接用静态的,大家需要的额时候换成动态的自己的数据即可。在写博客的时候还不知道怎么把录得效果的视频直接放上来,有知道的希望给我留言,感激不尽。在这里先用图片吧,大家...
  • Android平台提供了两类动画,分别是...另外加上gif动画,因为如果直接使用Bitmap或其他方法直接调用gif图片资源的话,显示的是静态的,如果要做成动态的,就需要一些其他的方法来实现。   首先来谈谈Tween动画...
  • 用html+css+js实现3D表白网页(一)

    千次阅读 2020-06-09 19:51:58
    闲暇时间,把自己的一些资料整理一下,这里展示的是一个3D的立体相册页面,因为是动态的相册,整体一直在缓慢逆时针旋转,截图只能展示静态的,看起来没实际效果那么美观。 每隔几秒中间会跳出一张前置图片,有点...
  • 甚至通过修改模板设置,可以把任何一个页面设置成动态页面或者是静态页面。 18.一键切换模板 模板是按栏目更换,灵活性更强。 19.兼容所有主流浏览器 ◦全面采用WEB标准设计,兼容性更好 ◦使用HTML,CSS,...
  • 甚至通过修改模板设置,可以把任何一个页面设置成动态页面或者是静态页面。 18.一键切换模板 模板是按栏目更换,灵活性更强。 19.兼容所有主流浏览器 ◦全面采用WEB标准设计,兼容性更好 ◦使用HTML,CSS,...
  • 可以使用本程序帮助企业站生成静态,提高企业站安全性:一般动态网站,可以外挂本程序自动生成静态页,静态页可按照设置定时更新; 支持代理服务器采集,避免目标站点封IP; 提取规则和多站点采集功能:通过这个功能...
  • 13. 可以使用本程序帮助企业站生成静态,提高企业站安全性:一般动态网站,可以外挂本程序自动生成静态页,静态页可按照设置定时更新; 14. 支持代理服务器采集,避免目标站点封IP; 15. 提取规则和多站点采集功能...
  • 13.可以使用本程序帮助企业站生成静态,提高企业站安全性:一般动态网站,可以外挂本程序自动生成静态页,静态页可按照设置定时更新; 14.支持代理服务器采集,避免目标站点封IP; 15.提取规则和多站点采集功能:...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 123
精华内容 49
关键字:

静态图片做成动态效果