Показать сообщение отдельно
  #486 (permalink)  
Старый 07.12.2013, 20:21
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Дзен-трансгуманист, программирование под винду это сущий ад. Я искрени ненавижу майкрософт.
Разница довольно таки приличная, когда пишешь на js довольно таки много вещей не учитываешь, к примеру большинство фишек которые можно провернуть на js на том же C# или C++ и близко не прокатит.
Или допустим анимация вот к примеру если так замутить анимацию
то на слабых пк это будет тормозить.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SlideTabAnimation
{
    /// <summary>
    /// Тип функции используемой для анимации
    /// </summary>
    enum DeltaType {
    Linear,
    Degree
    }

    class ControlAnimation
    {
        public delegate void AnimationProgress(double progress);
        public event AnimationProgress Progress;

        public event EventHandler CallBack;

        public delegate double Delta(double progress);

        Timer timer;
        int delay = 30,start;
        DeltaType _type = DeltaType.Linear; 

        /// <summary>
        /// Создает новый таймер
        /// </summary>
        /// <param name="duration">Время выполнения анимации (в секундах)</param>
        public ControlAnimation(double duration)
        {

            Create(duration);
        }

        double duration;

        /// <summary>
        /// Создает новый таймер
        /// </summary>
        /// <param name="duration">Время выполнения анимации (в секундах)</param>
        /// <param name="delay">Время между кадрами (в миллисекундах)</param>
        public ControlAnimation(double duration, int delay)
        {
            this.duration = duration;
            Create(delay, duration);
        }

      
        /// <summary>
        /// вызывает событие анимации
        /// </summary>
        /// <param name="delay">время между кадрами.</param>
        /// <param name="duration">длительность анимации.</param>
        void animate(int delay, double duration)
        {
            Delta func = linear;

            start = 0;

            timer = new Timer();

            timer.Interval = delay;

            if (_type == DeltaType.Degree)
                func = degree;

            timer.Tick += delegate(object sender, EventArgs e)
            {
                start += delay;

                double progress = start / duration;

                if (progress > 1) progress = 1;

                if (Progress != null)
                    Progress(func(progress));

                if (progress == 1) { 
                    timer.Stop();

                    if (CallBack != null)
                             CallBack(timer, new EventArgs()); 
                }
            };


        }

        double linear(double progress)
        {

            return progress;
        
        }

        double degree (double progress) 
        {

            return Math.Pow(progress, 3.5);

        }


        public void Stop()
        {

            timer.Stop();
            
        }

        /// <summary>
        /// Запуск анимации
        /// </summary>
        /// <param name="_continue">если true то продолжаеться предыдущая анимация, иначе начинаеится новая.</param>
        public void Start(bool _continue)
        {
            if (timer.Enabled) return;

            if (_continue) timer.Start();

            else
            {
                start = 0;

                timer.Start();
            }

        }

        /// <summary>
        /// Создает новый таймер
        /// </summary>
        /// <param name="duration">Время выполнения анимации (в секундах)</param>
        public void Create(double duration)
        {

            animate(delay, duration * 1000);

            this.duration = duration;

        }
        /// <summary>
        /// Создает новый таймер
        /// </summary>
        /// <param name="delay">Время между кадрами (в миллисекундах)</param>
        /// <param name="duration">Время выполнения анимации (в секундах)</param>
        public void Create(int delay, double duration)
        {
            animate(delay, duration * 1000);

            this.duration = duration;

        }

        /// <summary>
        /// Стостояние таймера
        /// </summary>
        public bool Enabled
        {

            get { return timer.Enabled; }
        }

        /// <summary>
        /// Время выполнения анимации (в секундах)
        /// </summary>
        public double Duration 
        {
            get { return duration; }

        }

        public DeltaType DeltaType {

            get { return _type; }

            set {

                _type = value;

                Create(delay, duration);
            }
        } 

    }
}


Написать обычный табы с анимацией, это столько головной боли. Под js писать легче.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием