
Hello, I'm
Aleksandr Denisov
Frontend Developer
Get To Know More
About Me
I’m interested in programming because I’ve seen how many incredible things can be built with it. To me, it’s not just about writing code — it’s about creating something meaningful that solves real problems.
I aim to be an innovative creator who focuses on solving real-world challenges. Programming is a powerful tool for bringing valuable ideas to life.
Education(Self Education)
Explore My
Tech Stack
Frontend Development
-
HTML
Intermediate
-
CSS/SASS
Intermediate
-
JavaScript
Basic-Intermediate
-
Vue
Basic-Intermediate
-
Git
Basic
-
Vite
Basic
-
Figma
Basic
Explore My
Code examples
- Utilization of OOP principles and separation of functionality into classes (DropdownManager, SellerSlider, DataLoader, PageSearch)
- Exporting functions and classes for use in other modules
- Encapsulation of logic within classes
- Asynchronous functions (async/await)
- Working with Promise for parallel data loading
- Arrow functions
- Destructuring assignment
- Using try/catch blocks for error handling in asynchronous operations
- Logging error messages to the console
- Providing user-friendly error feedback
- Implementation of drag functionality in slider with corresponding visual indicators (cursor changes)
- Dropdown menu with outside click handling
- Highlighting search text in results
- Responsive slider adjustments for different screen sizes
- Dynamic calculation of element dimensions
export class AnimateCounter {
constructor(target, endValue, duration) {
this.startTime = performance.now();
this.counterElement = target;
this.endValue = endValue;
this.duration = duration;
this.startAnimation();
}
formatNumber(value) {
if (value >= 10000) {
const kValue = Math.floor(value / 1000);
const remainder = value % 10000;
return `${kValue}k${remainder > 0 ? '+' : ''}`;
}
return value;
}
update(currentTime) {
const progress = Math.min((currentTime - this.startTime) / this.duration, 1);
const currentValue = this.formatNumber(Math.floor(this.endValue * progress));
this.counterElement.textContent = currentValue;
if (progress < 1) {
requestAnimationFrame((time) => this.update(time));
}
}
startAnimation() {
requestAnimationFrame((time) => this.update(time));
}
}
Browse My Recent