2024-08-17



<!DOCTYPE html>
<html>
<head>
<title>Custom Validation Example</title>
<script>
// 定义验证函数
function validateInput(event) {
  // 获取输入框的值
  var inputValue = event.target.value.trim();
  // 设置自定义验证信息
  if (inputValue.length === 0) {
    // 如果输入为空,设置自定义错误信息
    event.target.setCustomValidity('输入不能为空');
  } else {
    // 如果输入非空,则清除自定义错误信息
    event.target.setCustomValidity('');
  }
}
</script>
</head>
<body>
 
<form>
  <label for="customInput">请输入内容:</label>
  <input type="text" id="customInput" required oninput="validateInput(event)">
  <button type="submit">提交</button>
</form>
 
</body>
</html>

这段代码演示了如何在HTML5表单中实现自定义验证规则。当用户输入时,会触发oninput事件,然后调用validateInput函数进行验证。如果输入值为空或者只包含空白字符,则会调用setCustomValidity方法设置自定义的错误信息。如果输入非空,则清除错误信息,允许表单提交。

2024-08-17



import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
public class LoginController {
 
    @PostMapping("/login")
    @ResponseBody
    public String login(@RequestParam String username, @RequestParam String password) {
        // 这里应该是对用户名和密码的验证逻辑,但由于是示例,简单比较即可
        if ("admin".equals(username) && "password".equals(password)) {
            return "登录成功";
        } else {
            return "登录失败";
        }
    }
}

这段代码创建了一个简单的Spring Boot控制器,用于处理登录请求。它接收通过POST方法发送的用户名和密码,并进行简单的验证。在实际应用中,验证逻辑会更复杂,可能涉及数据库查询或其他安全措施。

2024-08-17

在HTML5中,可以使用<canvas>元素来实现动画。以下是一个简单的HTML5动画示例,它使用JavaScript来绘制动画:




<!DOCTYPE html>
<html>
<head>
<title>HTML5 Canvas 动画示例</title>
</head>
<body>
 
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
您的浏览器不支持Canvas。
</canvas>
 
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var x = 0;
 
function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillRect(x, 50, 50, 50);
    x += 10;
 
    if (x > canvas.width) {
        x = 0;
    }
 
    requestAnimationFrame(draw);
}
 
requestAnimationFrame(draw);
</script>
 
</body>
</html>

这段代码会在一个正方形从左至右移动的动画中重绘一个蓝色的背景。requestAnimationFrame函数用于在浏览器下次绘制屏幕时执行绘图函数,这样可以形成一个连续的动画效果。

2024-08-17

HTML5 <video> 标签用于在网页上嵌入视频内容。以下是一个基本的 <video> 标签示例,包含了一些常用的属性:




<video width="320" height="240" controls>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  您的浏览器不支持 video 标签。
</video>
  • widthheight 属性用于设置视频的显示尺寸。
  • controls 属性添加视频播放控制器,如播放、暂停和音量控制。
  • <source> 标签指定视频文件的路径和类型。如果浏览器不支持某种格式,可以通过添加更多的 <source> 标签来指定备用视频文件。
  • 最后的一行文本是备用显示内容,用于在浏览器不支持 <video> 标签时显示。

这个基本示例提供了一个入门级的视频嵌入方法,在实际应用中可以根据具体需求添加更多属性和事件处理程序。

2024-08-17

由于篇幅限制,这里仅提供每个页面的HTML结构代码示例。完整的代码请查看原链接中的文件。

  1. index.html (首页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <!-- 首页内容 -->
</body>
</html>
  1. about.html (关于页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>关于我</title>
</head>
<body>
    <!-- 关于我的内容 -->
</body>
</html>
  1. works.html (作品页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的作品</title>
</head>
<body>
    <!-- 作品展示内容 -->
</body>
</html>
  1. contact.html (联系页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>联系我</title>
</head>
<body>
    <!-- 联系表单 -->
</body>
</html>
  1. blog.html (博客页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的博客</title>
</head>
<body>
    <!-- 博客文章列表 -->
</body>
</html>
  1. single.html (单博文页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>博客文章</title>
</head>
<body>
    <!-- 单个博客文章内容 -->
</body>
</html>
  1. contact-success.html (联系成功页)



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>联系成功</title>
</head>
<body>
    <!-- 联系成功确认内容 -->
</body>
</html>

以上代码仅展示了每个页面的基本HTML结构,完整的样式和交互需要查看原链接中的文件。

2024-08-17

以下是一个使用Vue 3、TypeScript、Pinia、Vant 4和Vite创建的简单商城H5项目的基本目录结构和main.ts文件示例:




project-name/
|-- public/
|-- src/
|   |-- assets/
|   |   |-- logo.png
|   |-- components/
|   |   |-- MyComponent.vue
|   |-- store/
|   |   |-- index.ts
|   |   |-- cart.ts
|   |-- styles/
|   |   |-- base.scss
|   |-- App.vue
|   |-- main.ts
|-- vite.config.ts
|-- tsconfig.json
|-- babel.config.js
|-- postcss.config.js
|-- package.json
|-- index.html

src/main.ts 示例:




import { createApp } from 'vue';
import App from './App.vue';
import { store } from './store';
import Vant from 'vant';
import 'vant/lib/index.css';
 
const app = createApp(App);
 
app.use(store);
app.use(Vant);
 
app.mount('#app');

src/store/index.ts 示例:




import { defineStore } from 'pinia';
import { store } from './cart';
 
// 这里可以定义更多的store...
 
export const useStore = defineStore({
  id: 'main',
  state: () => ({
    // 状态定义
  }),
  actions: {
    // 方法定义
  }
});

src/store/cart.ts 示例:




import { defineStore } from 'pinia';
 
export const useCartStore = defineStore({
  id: 'cart',
  state: () => ({
    items: []
    // 购物车状态定义
  }),
  actions: {
    addToCart(item) {
      // 添加商品到购物车的方法
    }
    // 其他购物车相关方法
  }
});

vite.config.ts 示例(需要安装对应插件):




import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
 
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  // 其他配置
});

tsconfig.json 示例(部分配置):




{
  "compilerOptions": {
    "target": "esnext",
    "useDefineForClassFields": true,
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": ["esnext", "dom"],
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },
    "noEmit": true
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

package.json 示例(部分依赖):




{
  "name": "project-name",
  "version": "0.0.0",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies"
2024-08-17

HTML5 和 CSS3 的常见新特性包括:

  1. 语义化标签:如 <header>, <nav>, <section>, <article>, <aside>, <footer> 等。
  2. 画布(Canvas):使用 JavaScript 进行图形绘制。
  3. 视频和音频:<video><audio> 标签。
  4. 表单控件增强:如数值输入、日期输入、时间输入、颜色选择器等。
  5. CSS3 特效和变换:如阴影、渐变、边框、圆角、变换等。
  6. CSS3 布局:如弹性盒子(Flexbox)、网格(Grid)布局。
  7. 媒体查询:响应式设计。

以下是一些简单的示例代码:

HTML5 示例:




<header>头部信息</header>
<nav>导航链接</nav>
<section>
  <article>
    <h1>文章标题</h1>
    <p>这是一个段落。</p>
  </article>
</section>
<aside>侧边内容</aside>
<footer>底部信息</footer>

CSS3 示例:




/* 圆角边框和阴影效果 */
div {
  border-radius: 10px;
  box-shadow: 5px 5px 10px #888888;
}
 
/* 渐变背景 */
div {
  background: linear-gradient(to right, red, yellow);
}
 
/* 媒体查询实现响应式设计 */
@media screen and (max-width: 600px) {
  body {
    background-color: lightblue;
  }
}

画布(Canvas)示例:




<canvas id="myCanvas" width="200" height="100"></canvas>
<script>
  var canvas = document.getElementById('myCanvas');
  var ctx = canvas.getContext('2d');
  ctx.fillStyle = 'green';
  ctx.beginPath();
  ctx.arc(70, 40, 30, 0, 2 * Math.PI);
  ctx.fill();
</script>

视频和音频示例:




<video width="320" height="240" controls>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  Your browser does not support the video tag.
</video>
 
<audio controls>
  <source src="song.mp3" type="audio/mpeg">
  <source src="song.ogg" type="audio/ogg">
  Your browser does not support the audio element.
</audio>
2024-08-17

HTML5是HTML的新标准,于2014年10月由万维网联盟(W3C)完成,并得到广泛的应用。它提供了一些新的元素和属性,同时废弃了一些旧的元素和属性。

以下是一个简单的HTML5页面示例:




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的HTML5页面</title>
</head>
<body>
    <header>
        <h1>欢迎来到我的网站</h1>
    </header>
    <nav>
        <ul>
            <li><a href="#home">首页</a></li>
            <li><a href="#news">新闻</a></li>
            <li><a href="#contact">联系我们</a></li>
            <li><a href="#about">关于</a></li>
        </ul>
    </nav>
    <section id="home">
        <h2>首页内容</h2>
        <p>这是首页的详细内容。</p>
    </section>
    <section id="news">
        <h2>新闻标题</h2>
        <p>这是新闻内容。</p>
    </section>
    <section id="contact">
        <h2>联系方式</h2>
        <address>
            1234 省市路,国家
        </address>
    </section>
    <section id="about">
        <h2>关于我们</h2>
        <p>这是关于我们的简介。</p>
    </section>
    <footer>
        <p>版权所有 &copy; 2023 我的网站</p>
    </footer>
</body>
</html>

这个示例展示了HTML5中常见的结构化元素,包括<header>, <nav>, <section>, <article>, <aside>, <footer>等,它们有助于开发者更好地组织网页内容。

2024-08-17

HTML5提供了一种通过<audio><video>元素来嵌入音频和视频的标准方法。以下是一个简单的HTML5多媒体元素的示例代码,用于测试音频播放功能:




<!DOCTYPE html>
<html>
<head>
    <title>HTML5 多媒体元素测试</title>
</head>
<body>
    <audio id="myAudio" controls>
        <source src="your-audio-file.mp3" type="audio/mpeg">
        您的浏览器不支持 audio 元素。
    </audio>
    <script>
        function playAudio() {
            var myAudio = document.getElementById('myAudio');
            myAudio.play();
        }
    </script>
    <button onclick="playAudio()">播放音频</button>
</body>
</html>

在这个例子中,<audio>元素有一个controls属性,这会显示标准的播放控件。<source>元素指定了音频文件的路径和类型。JavaScript函数playAudio获取音频元素,并调用play方法来播放音频。

请确保替换your-audio-file.mp3为您的音频文件路径。如果浏览器不支持HTML5多媒体元素,它将显示<audio>标签中的文本。

2024-08-17

在HTML5和JavaScript中,可以使用navigator.mediaDevices.getUserMedia() API来访问摄像头和麦克风。以下是一个简单的例子,展示了如何使用这个API,并将摄像头捕捉的视频流显示在网页上。

首先,你需要一个HTML元素来显示视频,比如一个<video>标签,还有用于触发获取媒体设备的按钮。




<!DOCTYPE html>
<html>
<head>
    <title>摄像头和麦克风测试</title>
    <script src="https://cdn.jsdelivr.net/npm/layui-src/build/layui.js"></script>
</head>
<body>
 
<video id="video" width="640" height="480" autoplay></video>
<button id="start">开始</button>
 
<script>
    layui.use('layer', function(){
        var layer = layui.layer;
 
        document.getElementById('start').addEventListener('click', function() {
            // 获取媒体设备
            navigator.mediaDevices.getUserMedia({ video: true, audio: true })
            .then(function(stream) {
                // 将视频流设置为video元素的源
                document.getElementById('video').srcObject = stream;
            })
            .catch(function(err) {
                layer.msg('获取媒体设备失败:' + err.name, {icon: 2});
            });
        });
    });
</script>
 
</body>
</html>

在上面的代码中,我们首先通过getUserMedia获取用户的摄像头和麦克风。然后,我们绑定一个事件监听器到按钮上,当按钮被点击时,这段代码会执行。如果获取成功,视频流将会显示在<video>元素中。如果获取失败,将会使用Layui的layer.msg方法显示一个错误消息。

请确保您的网页是在一个安全的域(HTTPS)下运行,并且用户已授予权限访问摄像头和麦克风,否则getUserMedia调用将失败。