feat(math6): canvas-анимации — движок math6_anim.js + 3 флагмана
Новый headless-safe движок window.Math6Anim (по канве chem7_anim: RAF-цикл с паузой вне экрана через IntersectionObserver, prefers-reduced-motion, в jsdom/HeadlessChrome getContext НЕ вызывается → тесты не падают). Демо: rollingCircle (колесо катится → путь = C=2πr=πd), sweepArea (радиус заметает круг → S=πr²), areaModel (площадная модель умножения a·b на сетке 0,1). Вшито: Гл.6 §2 (колесо + заметание), Гл.1 §6 (умножение). Тесты math6: 19/19 (+canvas-демо монтируются headless-safe). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,7 @@ function buildPage(file) {
|
||||
let html = readF('frontend/textbooks/' + file);
|
||||
const inl = {
|
||||
'/js/math6_svg.js': readF('frontend/js/math6_svg.js'),
|
||||
'/js/math6_anim.js': readF('frontend/js/math6_anim.js'),
|
||||
'/js/math6_engine.js': readF('frontend/js/math6_engine.js')
|
||||
};
|
||||
html = html
|
||||
@@ -167,6 +168,20 @@ test('ch6: наглядная геометрия — интерактивы §1
|
||||
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
|
||||
});
|
||||
|
||||
test('анимации: canvas-демо монтируются (headless-safe)', async () => {
|
||||
// Глава 6 §2: колесо + заметание площади
|
||||
const r6 = await loadDom('math_6_ch6.html');
|
||||
r6.doc.defaultView.goTo('p2'); await wait(100);
|
||||
assert.ok(r6.doc.querySelector('#p2-roll canvas'), 'canvas «колесо» §6.2');
|
||||
assert.ok(r6.doc.querySelector('#p2-sweep canvas'), 'canvas «заметание площади» §6.2');
|
||||
assert.deepEqual(r6.errors, [], 'ch6 без ошибок: ' + r6.errors.join(' | '));
|
||||
// Глава 1 §6: площадная модель умножения
|
||||
const r1 = await loadDom('math_6_ch1.html');
|
||||
r1.doc.defaultView.goTo('p6'); await wait(100);
|
||||
assert.ok(r1.doc.querySelector('#p6-area canvas'), 'canvas «площадная модель» §1.6');
|
||||
assert.deepEqual(r1.errors, [], 'ch1 без ошибок: ' + r1.errors.join(' | '));
|
||||
});
|
||||
|
||||
test('hub: 6 карточек глав + курсовой финал', async () => {
|
||||
const { doc, errors } = await loadDom('math_6_hub.html');
|
||||
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
|
||||
|
||||
Reference in New Issue
Block a user