Я начинающий веб разработчик. Занимаюсь параллельно изучением html, css, php, sql, js, jquery, nodejs, websocket и пр. чуть более года. Сейчас работаю над улучшением стиля кода и его структуризацией. Скажу сразу, я ещё далёк от всеобъемлющего знания JS, так как учу его параллельно с уймой других языков и технологий, а так же учёбой в ВУЗе. Хотелось бы услышать конструктивные комментарии по поводу моего кода. Приведу пример скрипта для плавного скроллинга у себя на проекте.
let Scrolling = {
Run: function Run(ScrollWrapperId, ScrollSpaceId, Acceleration, Duration, MaxSpeed, ScrollerWrapperId, ScrollerId) {
let ScrollSession = {
Status: false,
ScrollWrapperId: ScrollWrapperId,
ScrollSpaceId: ScrollSpaceId,
ScrollWrapper: $(ScrollWrapperId),
ScrollSpace: $(ScrollSpaceId),
ScrollerWrapperId: ScrollerWrapperId,
ScrollerId: ScrollerId,
ScrollerWrapper: $(ScrollerWrapperId),
Scroller: $(ScrollerId),
SpeedPoint: 0,
Speed: 0,
MaxSpeed: 0,
Duration: Duration,
TimePoint: 0,
PreviousTime: 0,
LastTime: 0,
Interval: 0,
LocalInterval: 0,
Acceleration: Acceleration,
SystemDelta: 0,
Delta: 0,
FirstDelta: 0,
DeltaCoefficient: 0,
Offset: 0,
LocalOffset: 0,
};
$(document).on('wheel', ScrollSession.ScrollWrapperId, function (Event) {
Event.preventDefault();
ScrollSession.Offset = ScrollSession.ScrollWrapper.scrollTop();
ScrollSession.SystemDelta = Event.originalEvent.deltaY;
Scrolling.CalculateDelta(ScrollSession);
ScrollSession.TimePoint = performance.now();
ScrollSession.LastTime = performance.now() - 15;
Scrolling.CalculateSpeedPoint(ScrollSession);
if (!ScrollSession.Status) {
Scrolling.Animate(ScrollSession);
}
});
},
Animate: function Animate(ScrollSession) {
function AnimationStep() {
ScrollSession.Status = true;
ScrollSession.PreviousTime = ScrollSession.LastTime;
ScrollSession.LastTime = performance.now();
ScrollSession.Interval = ScrollSession.LastTime - ScrollSession.TimePoint;
ScrollSession.LocalInterval = ScrollSession.LastTime - ScrollSession.PreviousTime;
Scrolling.CalculateSpeed(ScrollSession);
Scrolling.CalculateOffset(ScrollSession);
ScrollSession.ScrollWrapper.scrollTop(ScrollSession.Offset);
if ((ScrollSession.Interval < ScrollSession.Duration) && (Math.abs(ScrollSession.LocalOffset) > 0.1)) {
requestAnimationFrame(AnimationStep);
} else {
ScrollSession.Status = false;
}
}
AnimationStep();
},
CalculateTiming: function CalculateTiming(t, b, c, d) {
t /= d;
t--;
return - c * (t*t*t*t - 1) + b;
},
CalculateDelta: function CalculateDelta(ScrollSession) {
if (ScrollSession.FirstDelta === 0) {
ScrollSession.FirstDelta = ScrollSession.SystemDelta;
if (ScrollSession.FirstDelta < 20) {
ScrollSession.DeltaCoefficient = Math.abs(100 / ScrollSession.SystemDelta);
} else {
ScrollSession.DeltaCoefficient = 1;
}
}
ScrollSession.Delta = ScrollSession.SystemDelta * ScrollSession.Acceleration * ScrollSession.DeltaCoefficient * ScrollSession.ScrollWrapper.height() / 300;
},
CalculateSpeedPoint: function CalculateSpeedPoint(ScrollSession) {
if ((ScrollSession.Speed > 0) && (ScrollSession.Delta > 0) || (ScrollSession.Speed < 0) && (ScrollSession.Delta < 0)) {
ScrollSession.SpeedPoint = ScrollSession.Speed + ScrollSession.Delta;
} else {
ScrollSession.SpeedPoint = ScrollSession.Delta;
}
},
CalculateSpeed: function CalculateSpeed(ScrollSession) {
ScrollSession.Speed = ScrollSession.SpeedPoint - Scrolling.CalculateTiming(ScrollSession.Interval, 0, ScrollSession.SpeedPoint, ScrollSession.Duration);
},
CalculateOffset: function CalculateOffset(ScrollSession) {
ScrollSession.LocalOffset = ScrollSession.Speed * ScrollSession.LocalInterval;
ScrollSession.Offset = ScrollSession.Offset + ScrollSession.LocalOffset;
},
IdentifyObjects: function IdentifyObjects(ScrollSession) {
ScrollSession.ScrollWrapper = $(ScrollSession.ScrollWrapperId);
ScrollSession.ScrollSpace = $(ScrollSession.ScrollSpaceId);
ScrollSession.ScrollerWrapper = $(ScrollSession.ScrollerWrapperId);
ScrollSession.Scroller = $(ScrollSession.ScrollerId);
}
};