2024-08-15

HTML5 提供了 MediaRecorder API 来实现录屏功能。以下是一个简单的例子,展示如何使用 MediaRecorder 来录制视频:




<!DOCTYPE html>
<html>
<head>
<title>Media Recorder Example</title>
</head>
<body>
 
<button id="start-recording">开始录制</button>
<button id="stop-recording" disabled>停止录制</button>
<button id="download-recording" disabled>下载录制</button>
 
<script>
  const startRecordingButton = document.getElementById('start-recording');
  const stopRecordingButton = document.getElementById('stop-recording');
  const downloadButton = document.getElementById('download-recording');
  let mediaRecorder;
  let recordedBlobs;
 
  startRecordingButton.addEventListener('click', () => {
    navigator.mediaDevices.getDisplayMedia({ video: true })
      .then(stream => {
        mediaRecorder = new MediaRecorder(stream, { mimeType: 'video/webm' });
        recordedBlobs = [];
 
        mediaRecorder.ondataavailable = event => {
          if (event.data && event.data.size > 0) {
            recordedBlobs.push(event.data);
          }
        };
 
        mediaRecorder.start();
        stopRecordingButton.disabled = false;
        console.log('Recording started');
      })
      .catch(error => console.error('Error:', error));
  });
 
  stopRecordingButton.addEventListener('click', () => {
    mediaRecorder.stop();
    stopRecordingButton.disabled = true;
    console.log('Recording stopped');
  });
 
  mediaRecorder.onstop = () => {
    const superBuffer = new Blob(recordedBlobs, { type: 'video/webm' });
    downloadButton.href = URL.createObjectURL(superBuffer);
    downloadButton.download = 'recording.webm';
    downloadButton.disabled = false;
  };
</script>
 
</body>
</html>

这段代码中,我们首先获取屏幕媒体流,然后创建 MediaRecorder 实例来录制视频。录制开始和结束时相关按钮会被禁用或启用。录制停止时,录制的视频会被保存到一个 Blob 中,并可以通过创建一个临时的 URL 并设置下载链接来进行下载。

2024-08-15

以下是一个简单的示例,展示了如何使用JavaScript和CSS创建一个简单的喵喵画网页版本。




<!DOCTYPE html>
<html>
<head>
    <title>喵喵画网</title>
    <style>
        body {
            background-color: #f7f7f7;
            font-family: Arial, sans-serif;
        }
        .container {
            width: 600px;
            margin: 100px auto;
            padding: 20px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 10px;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }
        .title {
            text-align: center;
            color: #333;
            padding: 20px;
        }
        .input-container {
            text-align: center;
            padding: 20px 0;
        }
        input[type="text"] {
            width: 80%;
            padding: 10px;
            margin: 0 10px;
            border: 1px solid #ddd;
            border-radius: 5px;
        }
        input[type="button"] {
            padding: 10px 20px;
            background-color: #5883d3;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        input[type="button"]:hover {
            background-color: #3d66a7;
        }
        #poem {
            text-align: center;
            padding: 20px;
            color: #333;
            font-size: 18px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="title">喵喵画网</div>
        <div class="input-container">
            <input type="text" id="text" placeholder="请输入内容" />
            <input type="button" value="生成喵喵" onclick="generatePoem()" />
        </div>
        <div id="poem"></div>
    </div>
    <script>
        function generatePoem() {
            var text = document.getElementById('text').value;
            var poem = text.split('').join('<br>') + '<br>哞哞哞';
            document.getElementById('poem').innerHTML = poem;
        }
    </script>
</body>
</html>

这段代码展示了如何使用JavaScript获取用户输入,并通过简单的字符串操作生成“喵喵”(即通过换行分隔每个字符来模拟),最后将生成的喵喵和用户输入的内容显示在网页上。这个示例简单易懂,适合作为学习前端开发的入门项目。

2024-08-15

以下是一个简单的示例,展示了如何使用JavaScript和CSS创建一个简单的喵喵画网页版本。




<!DOCTYPE html>
<html>
<head>
    <title>喵喵画网</title>
    <style>
        body {
            background-color: #f7f7f7;
            font-family: Arial, sans-serif;
        }
        #container {
            width: 600px;
            margin: 20px auto;
            padding: 20px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 5px;
        }
        #title {
            text-align: center;
            color: #333;
        }
        #drawing-area {
            margin-top: 10px;
            text-align: center;
        }
        canvas {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <div id="container">
        <h1 id="title">喵喵画网</h1>
        <div id="drawing-area">
            <canvas id="drawing-canvas" width="500" height="500"></canvas>
        </div>
    </div>
 
    <script>
        const canvas = document.getElementById('drawing-canvas');
        const context = canvas.getContext('2d');
 
        // 绘制图形的函数
        function drawShape(shape) {
            context.beginPath();
            context.arc(250, 250, 200, 0, Math.PI * 2); // 圆形
            context.strokeStyle = 'blue';
            context.stroke();
        }
 
        // 清除画布
        function clearCanvas() {
            context.clearRect(0, 0, canvas.width, canvas.height);
        }
 
        // 用户交互逻辑
        function handleInteraction(event) {
            clearCanvas();
            drawShape();
        }
 
        // 监听鼠标移动事件
        canvas.addEventListener('mousemove', handleInteraction);
    </script>
</body>
</html>

这段代码创建了一个简单的喵喵画网页,用户将在画布上绘制一个蓝色的圆形图案,当鼠标移动时触发重绘事件。这个示例主要用于演示如何使用JavaScript和HTML5的<canvas>元素进行基本的交互式绘图。

2024-08-15

以下是一个简化的HTML和CSS代码示例,用于创建一个基本的3D动态相册。这个示例仅包含核心的HTML结构和CSS样式,没有包含JavaScript动画代码,因为这会使代码例子过于冗长。




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D相册</title>
<style>
  /* 相册容器样式 */
  .album {
    width: 300px;
    height: 400px;
    perspective: 1000px;
    position: relative;
  }
 
  /* 相册页样式 */
  .page {
    width: 100%;
    height: 100%;
    position: absolute;
    backface-visibility: hidden;
    transition: transform 1s;
  }
 
  /* 页面旋转动画 */
  .album:hover .page {
    transform: rotateY(180deg);
  }
 
  /* 第一页样式 */
  .page-1 {
    background-image: url('img_front.jpg');
  }
 
  /* 第二页样式 */
  .page-2 {
    background-image: url('img_back.jpg');
    transform: rotateY(180deg);
  }
</style>
</head>
<body>
<div class="album">
  <div class="page page-1"></div>
  <div class="page page-2"></div>
</div>
</body>
</html>

这个示例展示了如何使用CSS创建一个基本的3D旋转相册。当鼠标悬停在相册上时,通过给 .album:hover .page 添加 transition 属性来实现页面旋转的动画效果。这个例子没有包含JavaScript,因此动画是静态的,没有交互。如果需要实现动态的翻页效果,你需要添加JavaScript来处理鼠标事件并相应地更改页面的 transform 属性。

2024-08-15

在Web前端开发中,CSS的定位机制主要用于控制元素在页面中的布局。CSS提供了三种定位机制:普通流定位、浮动定位和绝对定位。

  1. 普通流定位:元素按照其在HTML中的位置顺序依次排列,无需定位属性。
  2. 浮动定位:使用float属性,可以使元素向左或向右浮动,其他元素会围绕它排列。
  3. 绝对定位:使用position: absolute;,元素会相对于其最近的已定位的(即非static)祖先元素进行定位。如果没有,则相对于初始包含块。

示例代码:




<!DOCTYPE html>
<html>
<head>
    <style>
        /* 定位机制示例 */
        .static-position {
            /* 普通流定位 */
        }
 
        .relative-position {
            position: relative;
            top: 20px;
            left: 40px;
        }
 
        .absolute-position {
            position: absolute;
            top: 10px;
            right: 30px;
        }
 
        .float-position {
            float: right;
            margin-left: 10px;
        }
 
        .clearfix::after {
            content: "";
            clear: both;
            display: table;
        }
    </style>
</head>
<body>
 
<div>
    <div class="static-position">静态定位的元素</div>
    <div class="float-position">浮动定位的元素</div>
    <div class="clearfix"></div>
</div>
 
<div class="relative-position">相对定位的元素</div>
<div class="absolute-position">绝对定位的元素</div>
 
</body>
</html>

在这个例子中,.static-position类的元素使用了普通流定位,.relative-position类的元素使用了相对定位,.absolute-position类的元素使用了绝对定位,而.float-position类的元素使用了浮动定位。使用clearfix类来清除浮动,确保非浮动容器能包含浮动元素。

2024-08-15

以下是一个简单的HTML5 AJAX文件上传模块的示例代码:

HTML部分:




<form id="uploadForm" enctype="multipart/form-data">
    <input type="file" name="myFile" id="myFile" multiple>
    <input type="submit" value="Upload" id="upload">
</form>

JavaScript部分:




document.getElementById('uploadForm').onsubmit = function(event) {
    event.preventDefault();
 
    var files = document.getElementById('myFile').files;
    var formData = new FormData();
 
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        formData.append('files[]', file);
    }
 
    var xhr = new XMLHttpRequest();
 
    xhr.open('POST', '/upload', true);
 
    xhr.onload = function() {
        if (this.status == 200) {
            console.log('File(s) uploaded successfully');
        } else {
            console.error('Error during file upload');
        }
    };
 
    xhr.send(formData);
};

这段代码使用了HTML5的FormData对象来构建表单数据,并且使用了XMLHttpRequest来完成异步的文件上传。用户通过点击<input type="submit" value="Upload">按钮来触发上传。在实际应用中,你需要将/upload路径替换为你的服务器端处理上传文件的路径。

2024-08-15

申请高德地图Key的步骤:

  1. 访问高德开放平台官网(https://lbs.amap.com/)。
  2. 注册并登录账号。
  3. 进入控制台,选择“应用管理”。
  4. 创建新应用,获取所需的Web服务API、Web端、iOS端、Android端的Key。

封装map.js:




// 封装高德地图API调用
const amapKey = '你的高德地图key'; // 替换为你的高德地图Key
 
// 获取位置信息
function getLocation() {
  return new Promise((resolve, reject) => {
    uni.getLocation({
      type: 'wgs84',
      success: (res) => {
        resolve(res);
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}
 
// 使用高德地图API进行逆向解析地址
function getAddress(latitude, longitude) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `https://restapi.amap.com/v3/geocode/regeo?key=${amapKey}&location=${longitude},${latitude}`,
      success: (res) => {
        if (res.data && res.data.regeocode) {
          resolve(res.data.regeocode.formatted_address);
        } else {
          reject(new Error('无法获取地址信息'));
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}
 
export default {
  getLocation,
  getAddress
};

使用封装的map.js:




import map from './map.js';
 
async function getUserLocation() {
  try {
    const location = await map.getLocation();
    const address = await map.getAddress(location.latitude, location.longitude);
    console.log('用户位置:', address);
  } catch (error) {
    console.error('获取位置失败:', error.message);
  }
}
 
getUserLocation();

请确保在使用这些代码之前,你已经正确地将高德地图Key替换到amapKey变量中,并且已经处理好相关的权限问题,例如在Android和iOS平台上获取位置信息的权限。

2024-08-15

在HTML5、CSS3和JavaScript的基础上,创建一个简单的网页,该网页包含一个按钮,点击后在控制台输出"Hello, World!"。




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript Example</title>
    <style>
        button {
            padding: 10px 20px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #45a049;
        }
    </style>
</head>
<body>
 
<button onclick="sayHello()">Click Me</button>
 
<script>
    function sayHello() {
        console.log('Hello, World!');
    }
</script>
 
</body>
</html>

这个简单的网页展示了如何在HTML中添加一个按钮,并在CSS中给它一个样式。JavaScript函数sayHello()被绑定到按钮的点击事件上,当按钮被点击时,它会在浏览器的控制台输出"Hello, World!"。

2024-08-15

这是一个Web前端开发的简单示例,使用了HTML5, CSS3, JavaScript, Vue.js 和 Bootstrap。这个示例创建了一个简单的网站,展示了如何使用这些技术构建一个响应式网页。




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Web前端实战示例</title>
    <!-- 引入Bootstrap样式 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <!-- 引入Vue.js -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.min.js"></script>
    <style>
        /* 自定义CSS样式 */
        .jumbotron {
            margin-top: 20px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="app" class="container">
        <div class="jumbotron">
            <h1 class="display-4">{{ title }}</h1>
            <p class="lead">{{ subtitle }}</p>
        </div>
        <div class="row">
            <div class="col-md-4">
                <div class="card">
                    <div class="card-body">
                        <h5 class="card-title">{{ cards[0].title }}</h5>
                        <p class="card-text">{{ cards[0].text }}</p>
                    </div>
                </div>
            </div>
            <!-- 其他列组件 -->
        </div>
    </div>
 
    <script>
        new Vue({
            el: '#app',
            data: {
                title: '欢迎来到我的网站',
                subtitle: '这是一个简单的Vue.js + Bootstrap网页',
                cards: [
                    { title: '卡片1', text: '这是卡片的内容。' },
                    // 其他卡片数据
                ]
            }
        });
    </script>
</body>
</html>

这个示例展示了如何使用Vue.js来创建数据驱动的视图,以及如何使用Bootstrap提供的样式库来快速构建响应式网页。这个简单的网站可以作为学习Web前端开发的起点。

2024-08-14

在HTML和CSS中,可以通过设置元素的display属性来控制元素的显示方式。以下是一些常用的display值及其作用:

  • none:元素不显示,也不会占据任何空间。
  • block:元素作为块级元素显示,前后会有换行。
  • inline:元素作为行内元素显示,不会换行。
  • inline-block:元素既可以在行内显示也可以设置宽度和高度。
  • flex:元素作为弹性盒子显示。
  • grid:元素作为网格容器显示。

示例代码:

HTML:




<div class="block-element">我是块级元素</div>
<div class="inline-element">我是行内元素</div>
<div class="flex-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

CSS:




.block-element {
  display: block;
  width: 100%;
  background-color: lightblue;
  padding: 10px;
  margin-bottom: 10px;
}
 
.inline-element {
  display: inline;
  background-color: lightcoral;
  padding: 10px;
}
 
.flex-container {
  display: flex;
  background-color: lightgreen;
  padding: 10px;
}
 
.flex-item {
  display: flex; /* 通常情况下,flex子项默认为inline,不需要显式设置 */
  margin: 5px;
  padding: 10px;
  background-color: lightgray;
  flex: 1; /* 可选,用于弹性伸缩 */
}

在这个例子中,.block-element 设置为 block 来表现块级行为,.inline-element 设置为 inline 来表现行内行为。.flex-container.flex-item 使用 flex 布局来创建一个弹性盒子,其中 .flex-item 可以自动分配容器宽度。