← Kapat

1rm-calculator.js

// 1RM Hesaplayıcı JavaScript
document.addEventListener('DOMContentLoaded', function() {
    // DOM elementleri
    const weightSlider = document.getElementById('rm-weightSlider');
    const weightInput = document.getElementById('rm-weightInput');
    const repsSlider = document.getElementById('repsSlider');
    const repsInput = document.getElementById('repsInput');
    
    const rmResult = document.getElementById('rmResult');
    const rmProgress = document.getElementById('rmProgress');
    const rm2Element = document.getElementById('rm2');
    const rm3Element = document.getElementById('rm3');
    const rm5Element = document.getElementById('rm5');
    const rm10Element = document.getElementById('rm10');
    
    // Mevcut değerler
    let currentWeight = 10;
    let currentReps = 5;
    
    // Başlangıç
    init();
    
    function init() {
        setupEventListeners();
        updateSliderStyles();
        calculate1RM();
    }
    
    function setupEventListeners() {
        // Ağırlık slider ve input
        weightSlider.addEventListener('input', function() {
            currentWeight = parseFloat(this.value);
            weightInput.value = currentWeight;
            updateSliderStyle('weight');
            calculate1RM();
        });
        
        weightInput.addEventListener('input', function() {
            let value = parseFloat(this.value);
            if (value < 0) value = 0;
            if (value > 300) value = 300;
            
            currentWeight = value;
            weightSlider.value = value;
            this.value = value;
            updateSliderStyle('weight');
            calculate1RM();
        });
        
        // Tekrar slider ve input
        repsSlider.addEventListener('input', function() {
            currentReps = parseInt(this.value);
            repsInput.value = currentReps;
            updateSliderStyle('reps');
            calculate1RM();
        });
        
        repsInput.addEventListener('input', function() {
            let value = parseInt(this.value);
            if (value < 1) value = 1;
            if (value > 20) value = 20;
            
            currentReps = value;
            repsSlider.value = value;
            this.value = value;
            updateSliderStyle('reps');
            calculate1RM();
        });
    }
    
    function updateSliderStyles() {
        updateSliderStyle('weight');
        updateSliderStyle('reps');
    }
    
    function updateSliderStyle(type) {
        let slider, fill, thumb;
        let value, min, max;
        
        if (type === 'weight') {
            slider = weightSlider;
            fill = document.getElementById('rm-weightFill');
            thumb = document.getElementById('rm-weightThumb');
            value = currentWeight;
            min = 0;
            max = 300;
        } else {
            slider = repsSlider;
            fill = document.getElementById('repsFill');
            thumb = document.getElementById('repsThumb');
            value = currentReps;
            min = 1;
            max = 20;
        }
        
        const percentage = ((value - min) / (max - min)) * 100;
        
        if (fill) {
            fill.style.width = percentage + '%';
        }
        
        if (thumb) {
            thumb.style.left = percentage + '%';
        }
    }
    
    function calculate1RM() {
        // Epley formülü: 1RM = Ağırlık × (1 + Tekrar ÷ 30)
        const oneRM = currentWeight * (1 + currentReps / 30);
        
        // Sonuçları güncelle
        rmResult.textContent = Math.round(oneRM) + ' kg';
        
        // Progress bar güncelle (300 kg maksimum olarak kabul edilir)
        const progressPercentage = Math.min((oneRM / 300) * 100, 100);
        rmProgress.style.width = progressPercentage + '%';
        
        // Diğer RM değerlerini hesapla
        calculateOtherRMs(oneRM);
    }
    
    function calculateOtherRMs(oneRM) {
        // Diğer RM değerlerini hesapla (yüzdelik oranlarla)
        const rm2 = oneRM * 0.95; // %95
        const rm3 = oneRM * 0.93; // %93
        const rm5 = oneRM * 0.87; // %87
        const rm10 = oneRM * 0.75; // %75
        
        // Sonuçları güncelle
        rm2Element.textContent = Math.round(rm2) + ' kg';
        rm3Element.textContent = Math.round(rm3) + ' kg';
        rm5Element.textContent = Math.round(rm5) + ' kg';
        rm10Element.textContent = Math.round(rm10) + ' kg';
    }
    
    // Yüzdelik hesaplama fonksiyonu (kullanıcıya gösterilmez ama ihtiyaç duyulabilir)
    function calculatePercentage(percentage) {
        const oneRM = currentWeight * (1 + currentReps / 30);
        return Math.round(oneRM * (percentage / 100));
    }
    
    // RPE hesaplama fonksiyonu
    function calculateRPE(percentage) {
        if (percentage >= 100) return 10;
        if (percentage >= 95) return 9;
        if (percentage >= 90) return 8;
        if (percentage >= 85) return 7;
        if (percentage >= 80) return 6;
        if (percentage >= 75) return 5;
        if (percentage >= 70) return 4;
        if (percentage >= 65) return 3;
        if (percentage >= 60) return 2;
        return 1;
    }
    
    // Public fonksiyonlar (ihtiyaç duyulursa)
    window.get1RM = function() {
        return currentWeight * (1 + currentReps / 30);
    };
    
    window.getPercentageWeight = function(percentage) {
        return calculatePercentage(percentage);
    };
    
    window.getCurrentRPE = function() {
        const oneRM = currentWeight * (1 + currentReps / 30);
        const currentPercentage = (currentWeight / oneRM) * 100;
        return calculateRPE(currentPercentage);
    };
});