Загрузка данных


<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0"/>

<title>Математика — карточки</title>

<style>

    *{

        margin:0;

        padding:0;

        box-sizing:border-box;

        font-family: Arial, sans-serif;

    }

    body{

        background:#000;

        color:#fff;

        min-height:100vh;

        display:flex;

        justify-content:center;

        align-items:center;

        padding:20px;

    }

    .app{

        width:100%;

        max-width:900px;

    }

    .top{

        display:flex;

        justify-content:space-between;

        align-items:center;

        margin-bottom:20px;

        gap:10px;

        flex-wrap:wrap;

    }

    .counter{

        font-size:22px;

        font-weight:900;

    }

    .progress{

        font-size:18px;

        opacity:.8;

    }

    .scene{

        width:100%;

        height:500px;

        perspective:1200px;

    }

    .card{

        width:100%;

        height:100%;

        position:relative;

        transform-style:preserve-3d;

        transition:transform .6s;

        cursor:pointer;

    }

    .card.flipped{

        transform:rotateY(180deg);

    }

    .side{

        position:absolute;

        width:100%;

        height:100%;

        border-radius:28px;

        border:2px solid #222;

        background:#050505;

        backface-visibility:hidden;

        display:flex;

        justify-content:center;

        align-items:center;

        text-align:center;

        padding:40px;

        font-size:28px;

        font-weight:900;

        line-height:1.5;

        box-shadow:0 0 30px rgba(255,255,255,.05);

        overflow:auto;

    }

    .back{

        transform:rotateY(180deg);

    }

    .buttons{

        margin-top:25px;

        display:flex;

        gap:20px;

    }

    button{

        flex:1;

        padding:18px;

        border-radius:18px;

        border:2px solid transparent;

        color:#fff;

        font-size:22px;

        font-weight:900;

        cursor:pointer;

        transition:.2s;

        backdrop-filter: blur(8px);

    }

    button:hover{

        transform:scale(1.03);

    }

    .know{

        background:rgba(0,255,120,.15);

        border-color:rgba(0,255,120,.5);

    }

    .dont{

        background:rgba(255,0,0,.15);

        border-color:rgba(255,0,0,.5);

    }

    .restart{

        background:#111;

        border:2px solid #444;

    }

    .hidden{

        display:none;

    }

    .finish{

        text-align:center;

        padding:40px;

    }

    .finish h1{

        font-size:42px;

        margin-bottom:20px;

    }

    .finish p{

        font-size:24px;

        opacity:.8;

        margin-bottom:30px;

    }

    @media(max-width:700px){

        .side{

            font-size:22px;

            padding:25px;

        }

        button{

            font-size:18px;

            padding:15px;

        }

        .scene{

            height:430px;

        }

    }

</style>

</head>

<body>

<div class="app">

    <div class="top">

        <div class="counter" id="counter"></div>

        <div class="progress" id="progress"></div>

    </div>

    <div id="studyArea">

        <div class="scene">

            <div class="card" id="card">

                <div class="side front" id="question"></div>

                <div class="side back" id="answer"></div>

            </div>

        </div>

        <div class="buttons">

            <button class="know" onclick="markKnow()">ЗНАЮ</button>

            <button class="dont" onclick="markDontKnow()">НЕ ЗНАЮ</button>

        </div>

    </div>

    <div class="finish hidden" id="finish">

        <h1>Готово</h1>

        <p id="finishText"></p>

        <div class="buttons">

            <button class="dont" id="repeatWrongBtn">

                Повторить не знающие

            </button>

            <button class="restart" onclick="restartAll()">

                Повторить всё заново

            </button>

        </div>

    </div>

</div>

<script>

const cards = [

{

q:"1. Что такое вектор?",

a:"Вектор — направленный отрезок, имеющий начало и конец. Характеризуется длиной и направлением."

},

{

q:"2. Изображение векторов на плоскости и в пространстве.",

a:"Стрелка от точки A (начало) к точке B (конец). Обозначается AB⃗ или a⃗."

},

{

q:"3. Длина вектора.",

a:"Длина — расстояние от начала до конца вектора. Обозначается |a⃗| или |AB⃗|."

},

{

q:"4. Коллинеарные векторы.",

a:"Векторы, лежащие на одной прямой или на параллельных прямых."

},

{

q:"5. Сонаправленные и противоположно направленные.",

a:"Сонаправленные — коллинеарные, направлены в одну сторону. Противоположно направленные — направлены в разные стороны."

},

{

q:"6. Изображение сонаправленных и противоположных.",

a:"Сонаправленные — стрелки в одну сторону. Противоположно направленные — стрелки в противоположные стороны."

},

{

q:"7. Равные векторы.",

a:"Сонаправленные векторы равной длины."

},

{

q:"8. Сложение по правилу треугольника.",

a:"От конца вектора a⃗ откладываем вектор b⃗. Сумма a⃗+b⃗ — вектор от начала a⃗ к концу b⃗."

},

{

q:"9. Вычитание по правилу треугольника.",

a:"Векторы a⃗ и b⃗ откладываем из одной точки. Разность a⃗−b⃗ — вектор от конца b⃗ к концу a⃗."

},

{

q:"10. Сложение по правилу параллелограмма.",

a:"Векторы a⃗ и b⃗ откладываем из одной точки и достраиваем до параллелограмма. Сумма — диагональ."

},

{

q:"11. Правило многоугольника.",

a:"Векторы откладываем последовательно (конец к началу). Сумма — вектор от начала первого до конца последнего."

},

{

q:"12. Компланарные векторы.",

a:"Векторы, лежащие в одной плоскости или в параллельных плоскостях."

},

{

q:"13. Условие компланарности трёх векторов.",

a:"Смешанное произведение равно нулю: (a⃗,b⃗,c⃗)=0."

},

{

q:"14. Прямоугольная система координат в пространстве.",

a:"Три взаимно перпендикулярные оси Ox, Oy, Oz с общим началом O."

},

{

q:"15. Координатные (единичные) векторы.",

a:"Векторы i⃗,j⃗,k⃗ единичной длины."

},

{

q:"16. Координаты вектора.",

a:"a⃗ = x i⃗ + y j⃗ + z k⃗ ⇒ a⃗=(x;y;z)."

},

{

q:"17. Координаты равных векторов.",

a:"У равных векторов соответствующие координаты равны."

},

{

q:"18. Координаты суммы a⃗+b⃗.",

a:"(x1+x2; y1+y2; z1+z2)."

},

{

q:"19. Координаты разности a⃗−b⃗.",

a:"(x1−x2; y1−y2; z1−z2)."

},

{

q:"20. Координаты вектора k⋅a⃗.",

a:"(kx1; ky1; kz1)."

},

{

q:"21. Координаты вектора AB⃗.",

a:"(x2−x1; y2−y1; z2−z1)."

},

{

q:"22. Длина вектора.",

a:"|a⃗| = √(x²+y²+z²)."

},

{

q:"23. Расстояние между точками.",

a:"√((x2−x1)²+(y2−y1)²+(z2−z1)²)."

},

{

q:"24. Уравнение сферы.",

a:"(x−x0)²+(y−y0)²+(z−z0)²=R²."

},

{

q:"25. Условие коллинеарности.",

a:"a⃗ = k⋅b⃗."

},

{

q:"26. Скалярное произведение.",

a:"a⃗⋅b⃗ = |a⃗||b⃗|cosφ."

},

{

q:"27. Скалярное произведение через координаты.",

a:"x1x2+y1y2+z1z2."

},

{

q:"28. Косинус угла между векторами.",

a:"cosφ=(x1x2+y1y2+z1z2)/(|a⃗||b⃗|)."

},

{

q:"29. Условие перпендикулярности.",

a:"a⃗⋅b⃗=0."

},

{

q:"30. Условие сонаправленности.",

a:"a⃗=k⋅b⃗ при k>0."

},

{

q:"31. Условие противоположной направленности.",

a:"a⃗=k⋅b⃗ при k<0."

},

{

q:"32. Уравнение плоскости.",

a:"Ax+By+Cz+D=0."

},

{

q:"33. Расстояние от точки до плоскости.",

a:"d=|Ax0+By0+Cz0+D|/√(A²+B²+C²)."

},

{

q:"34. Виды задания прямой.",

a:"Общее, с угловым коэффициентом, каноническое, параметрическое и др."

},

{

q:"35. Уравнение прямой с угловым коэффициентом.",

a:"y=kx+b."

},

{

q:"36. Общее уравнение прямой.",

a:"Ax+By+C=0."

},

{

q:"37. Частные случаи общего уравнения.",

a:"C=0 — через начало координат; A=0 — параллельна Ox; B=0 — параллельна Oy."

},

{

q:"38. Уравнение прямой в отрезках.",

a:"x/a + y/b =1."

},

{

q:"39. Через точку с углом наклона.",

a:"y−y0=k(x−x0)."

},

{

q:"40. Через две точки.",

a:"(x−x1)/(x2−x1)=(y−y1)/(y2−y1)."

},

{

q:"41. Нормальное уравнение прямой.",

a:"xcosα+ysinα−p=0."

},

{

q:"42. Угол между прямыми.",

a:"Острый угол, образованный при пересечении."

},

{

q:"43. Условие параллельности.",

a:"k1=k2."

},

{

q:"44. Условие перпендикулярности.",

a:"k1⋅k2=−1."

},

{

q:"45. Условие параллельности (общий вид).",

a:"A1/A2 = B1/B2."

},

{

q:"46. Условие перпендикулярности (общий вид).",

a:"A1A2+B1B2=0."

},

{

q:"47. Расстояние от точки до прямой.",

a:"d=|Ax0+By0+C|/√(A²+B²)."

},

{

q:"48. Общее уравнение кривой второго порядка.",

a:"Ax²+Bxy+Cy²+Dx+Ey+F=0."

},

{

q:"49. Определение окружности.",

a:"Геометрическое место точек, равноудалённых от центра."

},

{

q:"50. Каноническое уравнение окружности.",

a:"(x−x0)²+(y−y0)²=R²."

},

{

q:"51. Определение эллипса.",

a:"Сумма расстояний до фокусов постоянна."

},

{

q:"52. Каноническое уравнение эллипса.",

a:"x²/a² + y²/b² =1."

},

{

q:"53. Эллипс: полуоси, фокусы.",

a:"r1+r2=2a."

},

{

q:"54. Эксцентриситет эллипса.",

a:"ε=c/a, 0<ε<1."

},

{

q:"55. Определение гиперболы.",

a:"Модуль разности расстояний до фокусов постоянен."

},

{

q:"56. Каноническое уравнение гиперболы.",

a:"x²/a² − y²/b² =1."

},

{

q:"57. Гипербола: полуоси, фокусы.",

a:"|r1−r2|=2a."

},

{

q:"58. Эксцентриситет и асимптоты гиперболы.",

a:"ε=c/a, y=±(b/a)x."

},

{

q:"59. Определение параболы.",

a:"Точки равноудалены от фокуса и директрисы."

},

{

q:"60. Каноническое уравнение параболы.",

a:"y²=2px."

},

{

q:"61. Парабола: параметр, фокус.",

a:"Фокус F(p/2;0)."

},

{

q:"62. Уравнение директрисы параболы.",

a:"x=−p/2."

}

];

let current = 0;

let wrongCards = [];

let activeDeck = [...cards];

const card = document.getElementById("card");

const question = document.getElementById("question");

const answer = document.getElementById("answer");

const counter = document.getElementById("counter");

const progress = document.getElementById("progress");

card.addEventListener("click",()=>{

    card.classList.toggle("flipped");

});

function renderCard(){

    const item = activeDeck[current];

    question.innerHTML = item.q;

    answer.innerHTML = item.a;

    card.classList.remove("flipped");

    counter.innerHTML = `Карточка ${current+1} / ${activeDeck.length}`;

    progress.innerHTML = `Не знаешь: ${wrongCards.length}`;

}

function nextCard(){

    current++;

    if(current >= activeDeck.length){

        finishRound();

        return;

    }

    renderCard();

}

function markKnow(){

    nextCard();

}

function markDontKnow(){

    wrongCards.push(activeDeck[current]);

    nextCard();

}

function finishRound(){

    document.getElementById("studyArea").classList.add("hidden");

    document.getElementById("finish").classList.remove("hidden");

    document.getElementById("finishText").innerHTML =

        `Не знаешь карточек: ${wrongCards.length}`;

    const repeatWrongBtn = document.getElementById("repeatWrongBtn");

    if(wrongCards.length === 0){

        repeatWrongBtn.style.display = "none";

    }else{

        repeatWrongBtn.style.display = "block";

    }

}

document.getElementById("repeatWrongBtn").addEventListener("click",()=>{

    activeDeck = [...wrongCards];

    wrongCards = [];

    current = 0;

    document.getElementById("finish").classList.add("hidden");

    document.getElementById("studyArea").classList.remove("hidden");

    renderCard();

});

function restartAll(){

    activeDeck = [...cards];

    wrongCards = [];

    current = 0;

    document.getElementById("finish").classList.add("hidden");

    document.getElementById("studyArea").classList.remove("hidden");

    renderCard();

}

renderCard();

</script>

</body>

</html>