← 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);
};
});