大数跨境

告别死板PPT!用WPS AI轻松做互动课件,学生上课再也不走神了

告别死板PPT!用WPS AI轻松做互动课件,学生上课再也不走神了 数字人才实训基地
2025-12-03
7
导读:技术赋能教学,让课堂真正“活”起来:借助WPS AI+交互网页技术,教师无需编程即可生成动态课件,将抽象知识转化为互动演示。学生通过参数调节、实时反馈,从被动听讲变为主动探索,显著提升课堂参与度和理解

点击上

在信息技术飞速发展的今天,如何让日常教学变得生动有趣,是每位教师思考的问题。
传统的PPT课件静态单调,难以展示编程的动态效果,现在通过WPS AI与各类AI工具的结合,我们可以轻松制作出交互式课件,让教学工作焕发新活力。
一、WPS AI生成PPT:智能备课新体验
WPS AI的智能PPT生成功能,让教师能够快速创建专业级的教学课件。只需输入教学目标和大纲要求,AI就能自动生成结构完整、内容丰富的演示文稿。
以数学中的正方体三视图为例,我们先用WPS的AI PPT功能生成PPT。
1. 进入 WPS 的 AI PPT 页面
打开 Windows 系统安装的 WPS 软件,在左侧的侧边栏最下方找到 AI PPT 功能,点击打开。

2. 通过对话生成PPT
在 AI PPT 的对话页面中,输入我们的需求,具体如下:
帮我生成一份PPT,给初中生讲解正方体的三视图,要有案例讲解,清晰易懂。

3. 配置模板和生成模式
最下方选择合适的免费模板,这里我们选择教育教学通用免费模板,然后打开联网搜索和深度思考。
点击对话框右下角的立即生成,WPS 开始为我们生成PPT大纲,我们确认大纲后就可以生成PPT了。
整个过程大约3分钟,小编也录制了生成的全过程,视频如下:
二、生成交互网页代码:AI助力零基础开发
借助先进的AI工具,教师无需编程基础也能轻松创建交互式网页。通过自然语言描述教学需求,AI能够生成功能完整的HTML代码,实现各种交互效果。
为了更好地给学生们展示正方体三视图的用法,这是中学数学知识中很难掌握的一个点,非常适合通过在线交互工具进行演示和学校。
这里我们使用 DeepSeekhttps://chat.deepseek.com) 做一个交互式小工具。
DeepSeek于12月1日发布了 V3.2 模型,效果更佳哦~~~
提示词(教学思路):
我是一名初中数学老师,我要教同学们正方体三视图相关知识,需要一个交互式动画网页,直观地向学生们展示正方体的三视图。请给我提供3条有价值的创意,并分别给出提示词。
基于DeepSeek返回的思路,我们修改网页代码的提示词,最终结果如下:
提示词(网页HTML代码)
创建一个HTML5交互式教学页面,使用Three.js库实现:
1. 中央区域:一个可鼠标拖拽旋转的3D正方体模型,表面有数字标签(前/上/右)
2. 右侧/下方:三个固定的2D视图框,分别实时显示主视图、俯视图、左视图
3. 交互逻辑:当学生拖拽旋转正方体时,右侧/下方的三个视图一定要同步更新;点击任意视图,正方体自动旋转到对应角度并用红色边框高亮该视角
4. 添加"视角锁定"按钮,可固定某一视图让学生仔细观察
5. UI设计:简洁明快,采用教育风格配色(蓝/绿/橙区分三个视图),所有文字为中文,添加操作提示文字
6. 响应式设计,兼容平板触屏操作,且网页长宽比为16:9
7. 正方体的3D模型和三视图,以骰子为案例做演示
将该提示词发给豆包(https://www.doubao.com/chat),生成的网页HTML如下:
<!DOCTYPE html><htmllang="zh-CN"><head>    <metacharset="UTF-8">    <metaname="viewport"content="width=device-width, initial-scale=1.0">    <title>3D骰子三视图教学演示</title>    <scriptsrc="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>    <style>        * {            margin0;            padding0;            box-sizing: border-box;            font-family'Microsoft YaHei', sans-serif;        }                body {            background-color#f5f7fa;            display: flex;            flex-direction: column;            align-items: center;            justify-content: center;            min-height100vh;            padding20px;            overflow-x: hidden;        }                .container {            width100%;            max-width1400px;            heightcalc(100vw * 9 / 16);            max-height787.5px;            background-color: white;            border-radius12px;            box-shadow0 4px 20px rgba(0,0,0,0.1);            display: flex;            flex-wrap: wrap;            overflow: hidden;            position: relative;        }                .main-view {            flex1;            min-width300px;            height100%;            position: relative;        }                #mainCanvas {            width100%;            height100%;            display: block;        }                .ortho-views {            display: flex;            flex-direction: column;            width280px;            height100%;            padding20px;            background-color#fafafa;            border-left1px solid #eee;        }                .ortho-view {            width100%;            height33.333%;            margin-bottom15px;            background-color: white;            border-radius8px;            box-shadow0 2px 8px rgba(0,0,0,0.05);            overflow: hidden;            position: relative;            cursor: pointer;            transition: all 0.3s ease;        }                .ortho-view:last-child {            margin-bottom0;        }                .ortho-view.active {            box-shadow0 0 0 2px #e74c3c0 4px 12px rgba(231,76,60,0.2);        }                .ortho-view canvas {            width100%;            height100%;            display: block;        }                .view-label {            position: absolute;            top10px;            left10px;            background-colorrgba(0,0,0,0.7);            color: white;            padding4px 10px;            border-radius20px;            font-size14px;            z-index10;        }                .view-label.front {            background-color#3498db;        }                .view-label.top {            background-color#2ecc71;        }                .view-label.left {            background-color#f39c12;        }                .controls {            position: absolute;            bottom20px;            left50%;            transformtranslateX(-50%);            display: flex;            gap15px;            z-index100;        }                .btn {            padding10px 20px;            background-color#3498db;            color: white;            border: none;            border-radius25px;            font-size16px;            cursor: pointer;            transition: all 0.2s ease;            box-shadow0 2px 6px rgba(52,152,219,0.3);        }                .btn:hover {            background-color#2980b9;            transformtranslateY(-2px);            box-shadow0 4px 8px rgba(52,152,219,0.4);        }                .btn.locked {            background-color#e74c3c;        }                .btn.locked:hover {            background-color#c0392b;        }                .instructions {            margin-top20px;            max-width800px;            text-align: center;            color#555;            line-height1.6;        }                .instructions h3 {            color#2c3e50;            margin-bottom10px;        }                .instructions p {            font-size14px;            margin-bottom5px;        }                /* 响应式调整 */        @media (max-width992px) {            .container {                height: auto;                flex-direction: column;            }                        .ortho-views {                width100%;                flex-direction: row;                height220px;                border-left: none;                border-top1px solid #eee;            }                        .ortho-view {                width33.333%;                height100%;                margin-bottom0;                margin-right15px;            }                        .ortho-view:last-child {                margin-right0;            }        }                @media (max-width576px) {            .ortho-views {                height: auto;                flex-direction: column;            }                        .ortho-view {                width100%;                margin-right0;            }                        .controls {                flex-wrap: wrap;                justify-content: center;            }                        .btn {                width100%;                max-width200px;            }        }    </style></head><body>    <divclass="container">        <divclass="main-view">            <canvasid="mainCanvas"></canvas>        </div>        <divclass="ortho-views">            <divclass="ortho-view"id="frontView">                <divclass="view-label front">主视图</div>                <canvasid="frontCanvas"></canvas>            </div>            <divclass="ortho-view"id="topView">                <divclass="view-label top">俯视图</div>                <canvasid="topCanvas"></canvas>            </div>            <divclass="ortho-view"id="leftView">                <divclass="view-label left">左视图</div>                <canvasid="leftCanvas"></canvas>            </div>        </div>        <divclass="controls">            <buttonclass="btn"id="lockBtn">视角锁定</button>        </div>    </div>        <divclass="instructions">        <h3>操作说明</h3>        <p>1. 鼠标拖拽/触屏滑动中央3D骰子可自由旋转,三视图将实时同步更新</p>        <p>2. 点击任意视图框,骰子将自动旋转到对应视角并高亮显示</p>        <p>3. 点击"视角锁定"按钮可固定当前视角,再次点击解锁</p>        <p>4. 骰子面说明:前面(1点)·上面(3点)·右面(2点)·左面(4点)·后面(6点)·下面(5点)</p>    </div>    <script>        // 全局变量        let scene, camera, renderer, cube;        let orthoCameras = {};        let orthoRenderers = {};        let isDragging = false;        let previousMousePosition = { x: 0, y: 0 };        let cubeRotation = { x: 0, y: 0 };        let isLocked = false;        let targetRotation = { x: 0, y: 0 };        let isRotatingToView = false;                // 初始化场景        function init() {            // 主场景            scene = new THREE.Scene();            scene.background = new THREE.Color(0xf8f9fa);                        // 主相机            camera = new THREE.PerspectiveCamera(75, document.getElementById('mainCanvas').clientWidth / document.getElementById('mainCanvas').clientHeight, 0.1, 1000);            camera.position.z = 5;                        // 主渲染器            renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('mainCanvas'), antialias: true });            renderer.setPixelRatio(window.devicePixelRatio);            renderer.setSize(document.getElementById('mainCanvas').clientWidth, document.getElementById('mainCanvas').clientHeight);                        // 创建骰子(带点数的正方体)            createDice();                        // 添加光源            addLights();                        // 初始化三视图            initOrthoViews();                        // 添加事件监听            addEventListeners();                        // 开始渲染循环            animate();        }                // 创建骰子(带点数纹理)        function createDice() {            const diceSize = 2;                        // 骰子材质(6个面,每个面有点数)            const materials = [                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(1) }), // 前面 (1点)                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(6) }), // 后面 (6点)                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(3) }), // 上面 (3点)                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(5) }), // 下面 (5点)                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(2) }), // 右面 (2点)                new THREE.MeshLambertMaterial({ color: 0xffffff, map: createDotTexture(4) }) // 左面 (4点)            ];                        // 创建正方体几何体            const geometry = new THREE.BoxGeometry(diceSize, diceSize, diceSize);            cube = new THREE.Mesh(geometry, materials);                        // 设置初始旋转            cubeRotation.x = Math.PI / 6;            cubeRotation.y = Math.PI / 4;            cube.rotation.x = cubeRotation.x;            cube.rotation.y = cubeRotation.y;                        scene.add(cube);        }                // 创建点数纹理        function createDotTexture(dotCount) {            const canvas = document.createElement('canvas');            const ctx = canvas.getContext('2d');            canvas.width = 256;            canvas.height = 256;                        // 背景白色            ctx.fillStyle = '#ffffff';            ctx.fillRect(0, 0, 256, 256);                        // 圆点样式            ctx.fillStyle = '#000000';            const dotRadius = 20;            const center = 128;            const offset = 60;                        // 根据点数绘制圆点            switch(dotCount) {                case 1:                    // 中心点                    drawDot(ctx, center, center, dotRadius);                    break;                case 2:                    // 对角                    drawDot(ctx, center - offset, center - offset, dotRadius);                    drawDot(ctx, center + offset, center + offset, dotRadius);                    break;                case 3:                    // 对角+中心                    drawDot(ctx, center - offset, center - offset, dotRadius);                    drawDot(ctx, center, center, dotRadius);                    drawDot(ctx, center + offset, center + offset, dotRadius);                    break;                case 4:                    // 四角                    drawDot(ctx, center - offset, center - offset, dotRadius);                    drawDot(ctx, center + offset, center - offset, dotRadius);                    drawDot(ctx, center - offset, center + offset, dotRadius);                    drawDot(ctx, center + offset, center + offset, dotRadius);                    break;                case 5:                    // 四角+中心                    drawDot(ctx, center - offset, center - offset, dotRadius);                    drawDot(ctx, center + offset, center - offset, dotRadius);                    drawDot(ctx, center - offset, center + offset, dotRadius);                    drawDot(ctx, center + offset, center + offset, dotRadius);                    drawDot(ctx, center, center, dotRadius);                    break;                case 6:                    // 三行两列                    drawDot(ctx, center - offset, center - offset*1.5, dotRadius);                    drawDot(ctx, center + offset, center - offset*1.5, dotRadius);                    drawDot(ctx, center - offset, center, dotRadius);                    drawDot(ctx, center + offset, center, dotRadius);                    drawDot(ctx, center - offset, center + offset*1.5, dotRadius);                    drawDot(ctx, center + offset, center + offset*1.5, dotRadius);                    break;            }                        // 创建纹理            const texture = new THREE.CanvasTexture(canvas);            texture.needsUpdate = true;            return texture;        }                // 绘制单个圆点        function drawDot(ctx, x, y, radius) {            ctx.beginPath();            ctx.arc(x, y, radius, 0, Math.PI * 2);            ctx.fill();            ctx.closePath();        }                // 添加光源        function addLights() {            // 环境光            const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);            scene.add(ambientLight);                        // 方向光1            const directionalLight1 = new THREE.DirectionalLight(0xffffff, 0.8);            directionalLight1.position.set(5, 5, 5);            scene.add(directionalLight1);                        // 方向光2            const directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.4);            directionalLight2.position.set(-5, -5, 5);            scene.add(directionalLight2);        }                // 初始化三视图        function initOrthoViews() {            const viewInfos = [                { id: 'front', canvasId: 'frontCanvas', label: '主视图', position: new THREE.Vector3(0, 0, 5), rotation: { x: 0, y: 0 } },                { id: 'top', canvasId: 'topCanvas', label: '俯视图', position: new THREE.Vector3(0, 5, 0), rotation: { x: -Math.PI/2, y: 0 } },                { id: 'left', canvasId: 'leftCanvas', label: '左视图', position: new THREE.Vector3(-5, 0, 0), rotation: { x: 0, y: Math.PI/2 } }            ];                        viewInfos.forEach(info => {                // 创建正交相机                const canvas = document.getElementById(info.canvasId);                const aspect = canvas.clientWidth / canvas.clientHeight;                const camera = new THREE.OrthographicCamera(-3 * aspect, 3 * aspect, 3, -3, 1, 10);                camera.position.copy(info.position);                camera.lookAt(0, 0, 0);                                orthoCameras[info.id] = {                    camera: camera,                    rotation: info.rotation,                    canvas: canvas                };                                // 创建渲染器                const renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true });                renderer.setPixelRatio(window.devicePixelRatio);                renderer.setSize(canvas.clientWidth, canvas.clientHeight);                orthoRenderers[info.id] = renderer;            });        }                // 添加事件监听        function addEventListeners() {            // 主视图鼠标/触屏事件            const mainCanvas = document.getElementById('mainCanvas');                        // 鼠标事件            mainCanvas.addEventListener('mousedown', onMouseDown);            window.addEventListener('mousemove', onMouseMove);            window.addEventListener('mouseup', onMouseUp);                        // 触屏事件            mainCanvas.addEventListener('touchstart', onTouchStart);            window.addEventListener('touchmove', onTouchMove);            window.addEventListener('touchend', onTouchEnd);                        // 视图点击事件            document.getElementById('frontView').addEventListener('click', () => rotateToView('front'));            document.getElementById('topView').addEventListener('click', () => rotateToView('top'));            document.getElementById('leftView').addEventListener('click', () => rotateToView('left'));                        // 视角锁定按钮            document.getElementById('lockBtn').addEventListener('click', toggleLock);                        // 窗口大小调整            window.addEventListener('resize', onWindowResize);        }                // 鼠标按下        function onMouseDown(event) {            if (isLocked || isRotatingToView) return;            isDragging = true;            previousMousePosition = {                x: event.clientX,                y: event.clientY            };        }                // 鼠标移动        function onMouseMove(event) {            if (!isDragging || isLocked || isRotatingToView) return;                        const deltaMove = {                x: event.clientX - previousMousePosition.x,                y: event.clientY - previousMousePosition.y            };                        // 更新旋转角度(取消x轴旋转限制,允许360度无限制旋转)            cubeRotation.y += deltaMove.x * 0.01;            cubeRotation.x += deltaMove.y * 0.01;                        // 更新立方体旋转(使用取模运算确保旋转角度的连续性)            cube.rotation.x = cubeRotation.x % (Math.PI * 2);            cube.rotation.y = cubeRotation.y % (Math.PI * 2);                        // 更新鼠标位置            previousMousePosition = {                x: event.clientX,                y: event.clientY            };        }                // 鼠标释放        function onMouseUp() {            isDragging = false;        }                // 触屏开始        function onTouchStart(event) {            if (isLocked || isRotatingToView) return;            isDragging = true;            previousMousePosition = {                x: event.touches[0].clientX,                y: event.touches[0].clientY            };        }                // 触屏移动        function onTouchMove(event) {            event.preventDefault();            if (!isDragging || isLocked || isRotatingToView) return;                        const deltaMove = {                x: event.touches[0].clientX - previousMousePosition.x,                y: event.touches[0].clientY - previousMousePosition.y            };                        // 更新旋转角度(取消x轴旋转限制,允许360度无限制旋转)            cubeRotation.y += deltaMove.x * 0.015;            cubeRotation.x += deltaMove.y * 0.015;                        // 更新立方体旋转(使用取模运算确保旋转角度的连续性)            cube.rotation.x = cubeRotation.x % (Math.PI * 2);            cube.rotation.y = cubeRotation.y % (Math.PI * 2);                        // 更新触摸位置            previousMousePosition = {                x: event.touches[0].clientX,                y: event.touches[0].clientY            };        }                // 触屏结束        function onTouchEnd() {            isDragging = false;        }                // 旋转到指定视图        function rotateToView(viewId) {            // 移除所有视图的active类            document.querySelectorAll('.ortho-view').forEach(view => {                view.classList.remove('active');            });                        // 给当前视图添加active类            document.getElementById(`${viewId}View`).classList.add('active');                        // 设置目标旋转角度            switch(viewId) {                case 'front':                    targetRotation.x = 0;                    targetRotation.y = 0;                    break;                case 'top':                    targetRotation.x = -Math.PI/2;                    targetRotation.y = 0;                    break;                case 'left':                    targetRotation.x = 0;                    targetRotation.y = Math.PI/2;                    break;            }                        isRotatingToView = true;        }                // 切换视角锁定        function toggleLock() {            isLocked = !isLocked;            const btn = document.getElementById('lockBtn');            if (isLocked) {                btn.textContent = '解锁视角';                btn.classList.add('locked');            } else {                btn.textContent = '视角锁定';                btn.classList.remove('locked');            }        }                // 窗口大小调整        function onWindowResize() {            // 更新主相机和渲染器            const mainCanvas = document.getElementById('mainCanvas');            camera.aspect = mainCanvas.clientWidth / mainCanvas.clientHeight;            camera.updateProjectionMatrix();            renderer.setSize(mainCanvas.clientWidth, mainCanvas.clientHeight);                        // 更新三视图            Object.keys(orthoCameras).forEach(id => {                const info = orthoCameras[id];                const aspect = info.canvas.clientWidth / info.canvas.clientHeight;                info.camera.left = -3 * aspect;                info.camera.right = 3 * aspect;                info.camera.updateProjectionMatrix();                orthoRenderers[id].setSize(info.canvas.clientWidth, info.canvas.clientHeight);            });        }                // 动画循环        function animate() {            requestAnimationFrame(animate);                        // 如果正在旋转到指定视图,使用缓动动画            if (isRotatingToView) {                const easeFactor = 0.1;                                // 计算当前旋转与目标旋转的差值                const deltaX = targetRotation.x - cube.rotation.x;                const deltaY = targetRotation.y - cube.rotation.y;                                // 更新旋转                cube.rotation.x += deltaX * easeFactor;                cube.rotation.y += deltaY * easeFactor;                                // 更新cubeRotation                cubeRotation.x = cube.rotation.x;                cubeRotation.y = cube.rotation.y;                                // 当差值足够小时,结束动画                if (Math.abs(deltaX) < 0.001 && Math.abs(deltaY) < 0.001) {                    cube.rotation.x = targetRotation.x;                    cube.rotation.y = targetRotation.y;                    cubeRotation.x = targetRotation.x;                    cubeRotation.y = targetRotation.y;                    isRotatingToView = false;                }            }                        // 渲染主视图            renderer.render(scene, camera);                        // 渲染三视图            Object.keys(orthoRenderers).forEach(id => {                orthoRenderers[id].render(scene, orthoCameras[id].camera);            });        }                // 初始化页面        window.addEventListener('load', init);    </script></body></html>
三、WPS插入网页HTML代码
WPS 的 AI 版和 365企业版 提供了便捷的网页 HTML 插入功能,让交互网页与PPT课件完美融合。
这一技术实现简单易操作,教师只需几个步骤就能完成整个流程,详细步骤如下:
1. 打开在线编辑
WPS 插入网页 HTML 代码的功能,需联网并打开在线编辑。我们点击右上角的分享,再打开【和他人一起查看/编辑】即可。

2. 插入网页 HTML 代码
菜单栏的最上方点击【插入】,右下方点击【插入网页互动内容】

3. 粘贴代码
右上角选择【插入代码】,复制豆包生成的网页 HTML 代码,粘贴进对话框中,右下角点击【运行】。

4. 结果展示
插入PPT后,我们在放映页面就可以互动展示正方体的三视图了,学生们可调整正方体的位置,并在右侧实时查看三视图结果,直观易懂。
四、跨学科应用案例
  • 数学学科:函数图像动态演示
通过交互式课件,学生可以调节函数参数,实时观察图像变化趋势。二次函数的开口方向、三角函数周期变化等抽象概念变得直观易懂。
  • 物理学科:运动定律可视化
自由落体、平抛运动等物理现象可以通过交互演示直观展示。学生能够调节初速度、角度等参数,观察运动轨迹的变化规律。
  • 化学学科:分子结构3D展示
复杂的分子结构和化学反应过程,通过交互式课件变得生动形象。学生可以从不同角度观察分子模型,深入理解化学键和反应机理。
  • 生物学科:生命过程模拟
细胞分裂、生态系统等生命过程通过交互演示变得直观可见。学生可以控制演示进度,仔细观察每个环节的变化细节。
五、总结:智慧教学新时代
交互式课件的应用正推动教学方式的深刻变革。基于WPS AI和交互网页技术的教学模式,重新定义了师生角色:
  • 教师从知识传授者转变为学习引导者,更专注于教学设计;
  • 学生通过亲身参与互动探索,建立起更牢固的知识体系。
动态演示将抽象概念具体化,实时互动让复杂过程直观化,显著提升了教学质量。
随着技术发展与教育理念创新,交互式课件必将成为未来教学的标准配置。
教育工作者应主动拥抱这一变革,让技术真正服务于教学,为学生创造更优质的学习体验。

【声明】内容源于网络
0
0
数字人才实训基地
自动化办公、数据分析、人工智能、云计算等前沿数字化能力培养和实战
内容 45
粉丝 0
数字人才实训基地 自动化办公、数据分析、人工智能、云计算等前沿数字化能力培养和实战
总阅读250
粉丝0
内容45