Дзен-трансгуманист, программирование под винду это сущий ад. Я искрени ненавижу майкрософт.
Разница довольно таки приличная, когда пишешь на 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 писать легче.