前端知识整理(全屏播放器 CSS JavaScript 轮转播放 jquery库 AJAX 画布 网页测试)

4,629次阅读
没有评论

共计 50374 个字符,预计需要花费 126 分钟才能阅读完成。

current time

在前端开发中,“current time”通常指的是获取用户设备的当前时间。这可以通过 JavaScript 来实现,下面是一个简单的示例代码,展示如何获取并显示当前时间:

DOCTYPE html>
html>
head>
title>显示当前时间title>
head>
body>

h1>当前时间:h1>
p id="demo">p>

script>

var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();


document.getElementById("demo").innerHTML = time;
script>

body>
html>

这段代码首先创建了一个 Date 对象,该对象包含了当前的日期和时间信息。然后通过调用 getHours()getMinutes()getSeconds()方法获取当前的时间,并将这些值组合成一个字符串格式。最后,使用 document.getElementById().innerHTML 将这个时间字符串插入到 HTML 文档中的指定位置(在这个例子中是

标签)。

如果你需要更精确地控制时间的格式,或者希望每隔一段时间自动更新时间显示,可以考虑使用定时器(如setInterval)来定期刷新时间显示。例如,每秒更新一次时间:

function updateTime() {
    var today = new Date();
    var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
    document.getElementById("demo").innerHTML = time;
}


updateTime();


setInterval(updateTime, 1000);

这样,页面上的时间会每秒自动更新,提供更加实时的显示效果。

在前端开发中,实现视频或音频播放器的进度条拖动、快进和快退功能是一个常见的需求。这里我将给出一个详细的实现示例,包括 HTML、CSS 和 JavaScript 代码,并进行相应的解析。

HTML 结构

首先,我们需要定义一个基本的 HTML 结构,包括一个视频元素和一个进度条输入元素。

DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
meta name="viewport" content="width=device-width, initial-scale=1.0">
title>视频播放器title>
link rel="stylesheet" href="styles.css">
head>
body>
div class="player">
    video id="myVideo" width="640" height="360" controls>
        source src="your-video-file.mp4" type="video/mp4">
        Your browser does not support the video tag.
    video>
    input type="range" id="seekBar" value="0" min="0" max="100">
div>
script src="script.js">script>
body>
html>

CSS 样式

接下来,我们添加一些基本的 CSS 样式来美化界面。


.player {
    text-align: center;
    margin-top: 50px;
}

#seekBar {
    width: 80%;
    margin: 20px auto;
}

JavaScript 逻辑

最后,我们编写 JavaScript 代码来处理进度条的拖动、快进和快退功能。


const video = document.getElementById('myVideo');
const seekBar = document.getElementById('seekBar');


function updateSeekBarMax() {
    seekBar.max = video.duration;
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);


seekBar.addEventListener('input', handleSeekBarChange);


function fastForward() {
    video.currentTime += 10; 
}

function rewind() {
    video.currentTime -= 10; 
}


const fastForwardButton = document.createElement('button');
fastForwardButton.textContent = '快进';
fastForwardButton.onclick = fastForward;

const rewindButton = document.createElement('button');
rewindButton.textContent = '快退';
rewindButton.onclick = rewind;

document.body.appendChild(fastForwardButton);
document.body.appendChild(rewindButton);

代码解析

  1. HTML 结构

    • 元素用于嵌入视频文件。
    • 元素用于创建一个可拖动的进度条。
  2. CSS 样式

    • 基本的居中对齐和宽度设置,使界面看起来更整洁。
  3. JavaScript 逻辑

    • updateSeekBarMax 函数:当视频元数据加载完成后,更新进度条的最大值为视频的总时长。
    • updateSeekBar 函数:当视频播放时间更新时,更新进度条的当前位置。
    • handleSeekBarChange 函数:当用户拖动进度条时,更新视频的当前播放时间。
    • 事件监听器:监听视频的 loadedmetadatatimeupdate 事件,以及进度条的 input 事件。
    • fastForwardrewind 函数:分别实现快进和快退功能,每次调用时增加或减少 10 秒的播放时间。
    • 动态创建按钮并添加到页面中,以便测试快进和快退功能。

通过以上步骤,你可以实现一个具有进度条拖动、快进和快退功能的简单视频播放器。

好的,让我们继续完善和优化这个视频播放器的功能。我们将添加更多的交互功能,比如播放 / 暂停按钮、音量控制等。同时,我们也会确保代码更加模块化和易于维护。

完善后的代码

HTML 结构

我们将在页面中添加更多的控件,如播放 / 暂停按钮和音量控制滑块。

DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
meta name="viewport" content="width=device-width, initial-scale=1.0">
title>视频播放器title>
link rel="stylesheet" href="styles.css">
head>
body>
div class="player">
    video id="myVideo" width="640" height="360" controls>
        source src="your-video-file.mp4" type="video/mp4">
        Your browser does not support the video tag.
    video>
    div class="controls">
        button id="playPauseButton">播放button>
        input type="range" id="seekBar" value="0" min="0" max="100">
        button id="fastForwardButton">快进button>
        button id="rewindButton">快退button>
        input type="range" id="volumeBar" min="0" max="1" step="0.1" value="1">
    div>
div>
script src="script.js">script>
body>
html>
CSS 样式

我们添加一些样式来美化控件。


.player {
    text-align: center;
    margin-top: 50px;
}

#myVideo {
    display: block;
    margin: 0 auto;
}

.controls {
    margin-top: 20px;
}

.controls button {
    margin: 0 10px;
}

#seekBar, #volumeBar {
    width: 80%;
    margin: 10px auto;
}
JavaScript 逻辑

我们将编写更完整的 JavaScript 逻辑来处理所有的交互功能。


const video = document.getElementById('myVideo');
const playPauseButton = document.getElementById('playPauseButton');
const seekBar = document.getElementById('seekBar');
const fastForwardButton = document.getElementById('fastForwardButton');
const rewindButton = document.getElementById('rewindButton');
const volumeBar = document.getElementById('volumeBar');


function updateSeekBarMax() {
    seekBar.max = video.duration;
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


function togglePlayPause() {
    if (video.paused) {
        video.play();
        playPauseButton.textContent = '暂停';
    } else {
        video.pause();
        playPauseButton.textContent = '播放';
    }
}


function fastForward() {
    video.currentTime += 10;
}


function rewind() {
    video.currentTime -= 10;
}


function adjustVolume() {
    video.volume = volumeBar.value;
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);


seekBar.addEventListener('input', handleSeekBarChange);


playPauseButton.addEventListener('click', togglePlayPause);


fastForwardButton.addEventListener('click', fastForward);


rewindButton.addEventListener('click', rewind);


volumeBar.addEventListener('input', adjustVolume);

代码解析

  1. HTML 结构

    • 添加了播放 / 暂停按钮 ()。
    • 添加了快进和快退按钮 ()。
    • 添加了音量控制滑块 ()。
  2. CSS 样式

    • 为按钮和滑块添加了一些基本的样式,使其更美观。
  3. JavaScript 逻辑

    • updateSeekBarMax 函数:当视频元数据加载完成后,更新进度条的最大值为视频的总时长。
    • updateSeekBar 函数:当视频播放时间更新时,更新进度条的当前位置。
    • handleSeekBarChange 函数:当用户拖动进度条时,更新视频的当前播放时间。
    • togglePlayPause 函数:切换视频的播放和暂停状态,并更新按钮文本。
    • fastForward 函数:快进 10 秒。
    • rewind 函数:快退 10 秒。
    • adjustVolume 函数:根据音量滑块的值调整视频的音量。
    • 事件监听器:监听视频的 loadedmetadatatimeupdate 事件,以及进度条、播放 / 暂停按钮、快进按钮、快退按钮和音量滑块的相应事件。

通过以上步骤,你可以实现一个功能齐全的视频播放器,包括进度条拖动、快进、快退、播放 / 暂停和音量控制等功能。

全屏播放 样式 按钮 添加反射调用函数 执行不同浏览器页面全屏播放

好的,我们可以在现有的视频播放器基础上添加全屏播放功能。为了实现这一功能,我们需要做以下几件事:

  1. HTML 结构:添加一个全屏按钮。
  2. CSS 样式:添加一些样式来美化全屏按钮。
  3. JavaScript 逻辑:实现全屏播放的逻辑,并添加反射调用函数以确保在不同浏览器中都能正确执行全屏操作。

完善后的代码

HTML 结构

在现有结构的基础上添加一个全屏按钮。

DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
meta name="viewport" content="width=device-width, initial-scale=1.0">
title>视频播放器title>
link rel="stylesheet" href="styles.css">
head>
body>
div class="player">
    video id="myVideo" width="640" height="360" controls>
        source src="your-video-file.mp4" type="video/mp4">
        Your browser does not support the video tag.
    video>
    div class="controls">
        button id="playPauseButton">播放button>
        input type="range" id="seekBar" value="0" min="0" max="100">
        button id="fastForwardButton">快进button>
        button id="rewindButton">快退button>
        input type="range" id="volumeBar" min="0" max="1" step="0.1" value="1">
        button id="fullScreenButton">全屏button>
    div>
div>
script src="script.js">script>
body>
html>
CSS 样式

添加一些样式来美化全屏按钮。


.player {
    text-align: center;
    margin-top: 50px;
}

#myVideo {
    display: block;
    margin: 0 auto;
}

.controls {
    margin-top: 20px;
}

.controls button {
    margin: 0 10px;
}

#seekBar, #volumeBar {
    width: 80%;
    margin: 10px auto;
}

#fullScreenButton {
    background-color: #4CAF50; 
    border: none;
    color: white;
    padding: 10px 20px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 16px;
    cursor: pointer;
    border-radius: 4px;
}
JavaScript 逻辑

实现全屏播放的逻辑,并添加反射调用函数以确保在不同浏览器中都能正确执行全屏操作。


const video = document.getElementById('myVideo');
const playPauseButton = document.getElementById('playPauseButton');
const seekBar = document.getElementById('seekBar');
const fastForwardButton = document.getElementById('fastForwardButton');
const rewindButton = document.getElementById('rewindButton');
const volumeBar = document.getElementById('volumeBar');
const fullScreenButton = document.getElementById('fullScreenButton');


function updateSeekBarMax() {
    seekBar.max = video.duration;
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


function togglePlayPause() {
    if (video.paused) {
        video.play();
        playPauseButton.textContent = '暂停';
    } else {
        video.pause();
        playPauseButton.textContent = '播放';
    }
}


function fastForward() {
    video.currentTime += 10;
}


function rewind() {
    video.currentTime -= 10;
}


function adjustVolume() {
    video.volume = volumeBar.value;
}


function toggleFullScreen() {
    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
        
        if (video.requestFullscreen) {
            video.requestFullscreen();
        } else if (video.msRequestFullscreen) {
            video.msRequestFullscreen();
        } else if (video.mozRequestFullScreen) {
            video.mozRequestFullScreen();
        } else if (video.webkitRequestFullscreen) {
            video.webkitRequestFullscreen();
        }
    } else {
        
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        } else if (document.webkitExitFullscreen) {
            document.webkitExitFullscreen();
        }
    }
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);


seekBar.addEventListener('input', handleSeekBarChange);


playPauseButton.addEventListener('click', togglePlayPause);


fastForwardButton.addEventListener('click', fastForward);


rewindButton.addEventListener('click', rewind);


volumeBar.addEventListener('input', adjustVolume);


fullScreenButton.addEventListener('click', toggleFullScreen);

代码解析

  1. HTML 结构

    • 添加了一个全屏按钮 ()。
  2. CSS 样式

    • 为全屏按钮添加了一些基本的样式,使其更美观。
  3. JavaScript 逻辑

    • toggleFullScreen 函数:实现全屏播放的逻辑。使用反射调用方法来确保在不同浏览器中都能正确执行全屏操作。
    • 事件监听器:监听全屏按钮的点击事件,调用 toggleFullScreen 函数。

通过以上步骤,你可以实现一个功能齐全的视频播放器,包括进度条拖动、快进、快退、播放 / 暂停、音量控制和全屏播放等功能。

好的,我们已经完成了视频播放器的基本功能,包括进度条拖动、快进、快退、播放 / 暂停、音量控制和全屏播放。接下来,我们可以进一步优化和扩展这个播放器,例如添加更多样化的样式、错误处理和用户体验改进。

进一步优化和扩展

1. 样式优化

我们可以进一步优化样式,使其更符合现代设计标准,例如使用 Flexbox 或 Grid 布局来更好地排列控件。


.player {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-top: 50px;
}

#myVideo {
    width: 100%;
    max-width: 640px;
    height: auto;
}

.controls {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 20px;
}

.controls button {
    margin: 0 10px;
    padding: 10px 20px;
    background-color: #4CAF50;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.3s;
}

.controls button:hover {
    background-color: #45a049;
}

#seekBar, #volumeBar {
    width: 80%;
    margin: 10px auto;
}
2. 错误处理

添加一些错误处理机制,以提高用户体验。例如,当视频加载失败时显示提示信息。


const video = document.getElementById('myVideo');
const playPauseButton = document.getElementById('playPauseButton');
const seekBar = document.getElementById('seekBar');
const fastForwardButton = document.getElementById('fastForwardButton');
const rewindButton = document.getElementById('rewindButton');
const volumeBar = document.getElementById('volumeBar');
const fullScreenButton = document.getElementById('fullScreenButton');


function updateSeekBarMax() {
    seekBar.max = video.duration;
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


function togglePlayPause() {
    if (video.paused) {
        video.play();
        playPauseButton.textContent = '暂停';
    } else {
        video.pause();
        playPauseButton.textContent = '播放';
    }
}


function fastForward() {
    video.currentTime += 10;
}


function rewind() {
    video.currentTime -= 10;
}


function adjustVolume() {
    video.volume = volumeBar.value;
}


function toggleFullScreen() {
    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
        
        if (video.requestFullscreen) {
            video.requestFullscreen();
        } else if (video.msRequestFullscreen) {
            video.msRequestFullscreen();
        } else if (video.mozRequestFullScreen) {
            video.mozRequestFullScreen();
        } else if (video.webkitRequestFullscreen) {
            video.webkitRequestFullscreen();
        }
    } else {
        
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        } else if (document.webkitExitFullscreen) {
            document.webkitExitFullscreen();
        }
    }
}


function handleError(event) {
    alert('视频加载失败,请检查网络连接或视频源是否正确。');
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);
video.addEventListener('error', handleError);


seekBar.addEventListener('input', handleSeekBarChange);


playPauseButton.addEventListener('click', togglePlayPause);


fastForwardButton.addEventListener('click', fastForward);


rewindButton.addEventListener('click', rewind);


volumeBar.addEventListener('input', adjustVolume);


fullScreenButton.addEventListener('click', toggleFullScreen);
3. 用户体验改进

我们可以添加一些额外的功能来提升用户体验,例如显示当前播放时间和总时间,以及在全屏模式下隐藏控件。

DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
meta name="viewport" content="width=device-width, initial-scale=1.0">
title>视频播放器title>
link rel="stylesheet" href="styles.css">
head>
body>
div class="player">
    video id="myVideo" width="640" height="360" controls>
        source src="your-video-file.mp4" type="video/mp4">
        Your browser does not support the video tag.
    video>
    div class="controls">
        button id="playPauseButton">播放button>
        span id="currentTime">00:00span> / span id="totalTime">00:00span>
        input type="range" id="seekBar" value="0" min="0" max="100">
        button id="fastForwardButton">快进button>
        button id="rewindButton">快退button>
        input type="range" id="volumeBar" min="0" max="1" step="0.1" value="1">
        button id="fullScreenButton">全屏button>
    div>
div>
script src="script.js">script>
body>
html>

.player {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-top: 50px;
}

#myVideo {
    width: 100%;
    max-width: 640px;
    height: auto;
}

.controls {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 20px;
}

.controls button {
    margin: 0 10px;
    padding: 10px 20px;
    background-color: #4CAF50;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.3s;
}

.controls button:hover {
    background-color: #45a049;
}

#seekBar, #volumeBar {
    width: 80%;
    margin: 10px auto;
}

#currentTime, #totalTime {
    margin: 0 10px;
    font-weight: bold;
}

const video = document.getElementById('myVideo');
const playPauseButton = document.getElementById('playPauseButton');
const seekBar = document.getElementById('seekBar');
const fastForwardButton = document.getElementById('fastForwardButton');
const rewindButton = document.getElementById('rewindButton');
const volumeBar = document.getElementById('volumeBar');
const fullScreenButton = document.getElementById('fullScreenButton');
const currentTimeDisplay = document.getElementById('currentTime');
const totalTimeDisplay = document.getElementById('totalTime');


function updateSeekBarMax() {
    seekBar.max = video.duration;
    totalTimeDisplay.textContent = formatTime(video.duration);
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
    currentTimeDisplay.textContent = formatTime(video.currentTime);
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


function togglePlayPause() {
    if (video.paused) {
        video.play();
        playPauseButton.textContent = '暂停';
    } else {
        video.pause();
        playPauseButton.textContent = '播放';
    }
}


function fastForward() {
    video.currentTime += 10;
}


function rewind() {
    video.currentTime -= 10;
}


function adjustVolume() {
    video.volume = volumeBar.value;
}


function toggleFullScreen() {
    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
        
        if (video.requestFullscreen) {
            video.requestFullscreen();
        } else if (video.msRequestFullscreen) {
            video.msRequestFullscreen();
        } else if (video.mozRequestFullScreen) {
            video.mozRequestFullScreen();
        } else if (video.webkitRequestFullscreen) {
            video.webkitRequestFullscreen();
        }
    } else {
        
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        } else if (document.webkitExitFullscreen) {
            document.webkitExitFullscreen();
        }
    }
}


function handleError(event) {
    alert('视频加载失败,请检查网络连接或视频源是否正确。');
}


function formatTime(time) {
    const minutes = Math.floor(time / 60);
    const seconds = Math.floor(time % 60).toString().padStart(2, '0');
    return `${minutes}:${seconds}`;
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);
video.addEventListener('error', handleError);


seekBar.addEventListener('input', handleSeekBarChange);


playPauseButton.addEventListener('click', togglePlayPause);


fastForwardButton.addEventListener('click', fastForward);


rewindButton.addEventListener('click', rewind);


volumeBar.addEventListener('input', adjustVolume);


fullScreenButton.addEventListener('click', toggleFullScreen);

代码解析

  1. HTML 结构

    • 添加了显示当前播放时间和总时间的元素 ()。
  2. CSS 样式

    • 为当前播放时间和总时间的显示元素添加了一些样式,使其更美观。
  3. JavaScript 逻辑

    • formatTime 函数:将时间从秒转换为分钟和秒的格式。
    • updateSeekBarMax 函数:更新进度条的最大值,并显示总时间。
    • updateSeekBar 函数:更新进度条的当前位置,并显示当前播放时间。
    • 事件监听器:监听视频的 loadedmetadatatimeupdate 事件,以及进度条、播放 / 暂停按钮、快进按钮、快退按钮和音量滑块的相应事件。

通过以上步骤,你可以实现一个功能更强大、用户体验更好的视频播放器。

launchfullscreen 播放器全屏 exitfullscreen 退出全屏状态

好的,我们可以进一步完善全屏功能,使其更加灵活和用户友好。我们将使用 requestFullscreenexitFullscreen 方法来实现全屏和退出全屏的功能,并确保在不同浏览器中都能正常工作。

完善后的代码

HTML 结构

在现有结构的基础上保持不变,确保有一个全屏按钮。

DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
meta name="viewport" content="width=device-width, initial-scale=1.0">
title>视频播放器title>
link rel="stylesheet" href="styles.css">
head>
body>
div class="player">
    video id="myVideo" width="640" height="360" controls>
        source src="your-video-file.mp4" type="video/mp4">
        Your browser does not support the video tag.
    video>
    div class="controls">
        button id="playPauseButton">播放button>
        span id="currentTime">00:00span> / span id="totalTime">00:00span>
        input type="range" id="seekBar" value="0" min="0" max="100">
        button id="fastForwardButton">快进button>
        button id="rewindButton">快退button>
        input type="range" id="volumeBar" min="0" max="1" step="0.1" value="1">
        button id="fullScreenButton">全屏button>
    div>
div>
script src="script.js">script>
body>
html>
CSS 样式

保持现有的样式,确保全屏按钮和其他控件美观。


.player {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-top: 50px;
}

#myVideo {
    width: 100%;
    max-width: 640px;
    height: auto;
}

.controls {
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 20px;
}

.controls button {
    margin: 0 10px;
    padding: 10px 20px;
    background-color: #4CAF50;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    transition: background-color 0.3s;
}

.controls button:hover {
    background-color: #45a049;
}

#seekBar, #volumeBar {
    width: 80%;
    margin: 10px auto;
}

#currentTime, #totalTime {
    margin: 0 10px;
    font-weight: bold;
}
JavaScript 逻辑

实现全屏和退出全屏的功能,并确保在不同浏览器中都能正常工作。


const video = document.getElementById('myVideo');
const playPauseButton = document.getElementById('playPauseButton');
const seekBar = document.getElementById('seekBar');
const fastForwardButton = document.getElementById('fastForwardButton');
const rewindButton = document.getElementById('rewindButton');
const volumeBar = document.getElementById('volumeBar');
const fullScreenButton = document.getElementById('fullScreenButton');
const currentTimeDisplay = document.getElementById('currentTime');
const totalTimeDisplay = document.getElementById('totalTime');


function updateSeekBarMax() {
    seekBar.max = video.duration;
    totalTimeDisplay.textContent = formatTime(video.duration);
}


function updateSeekBar() {
    seekBar.value = video.currentTime;
    currentTimeDisplay.textContent = formatTime(video.currentTime);
}


function handleSeekBarChange() {
    video.currentTime = seekBar.value;
}


function togglePlayPause() {
    if (video.paused) {
        video.play();
        playPauseButton.textContent = '暂停';
    } else {
        video.pause();
        playPauseButton.textContent = '播放';
    }
}


function fastForward() {
    video.currentTime += 10;
}


function rewind() {
    video.currentTime -= 10;
}


function adjustVolume() {
    video.volume = volumeBar.value;
}


function launchFullScreen(element) {
    if (element.requestFullscreen) {
        element.requestFullscreen();
    } else if (element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
    } else if (element.webkitRequestFullscreen) {
        element.webkitRequestFullscreen();
    } else if (element.msRequestFullscreen) {
        element.msRequestFullscreen();
    }
}


function exitFullScreen() {
    if (document.exitFullscreen) {
        document.exitFullscreen();
    } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
    } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
    }
}


function toggleFullScreen() {
    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
        
        launchFullScreen(video);
    } else {
        
        exitFullScreen();
    }
}


function handleError(event) {
    alert('视频加载失败,请检查网络连接或视频源是否正确。');
}


function formatTime(time) {
    const minutes = Math.floor(time / 60);
    const seconds = Math.floor(time % 60).toString().padStart(2, '0');
    return `${minutes}:${seconds}`;
}


video.addEventListener('loadedmetadata', updateSeekBarMax);
video.addEventListener('timeupdate', updateSeekBar);
video.addEventListener('error', handleError);


seekBar.addEventListener('input', handleSeekBarChange);


playPauseButton.addEventListener('click', togglePlayPause);


fastForwardButton.addEventListener('click', fastForward);


rewindButton.addEventListener('click', rewind);


volumeBar.addEventListener('input', adjustVolume);


fullScreenButton.addEventListener('click', toggleFullScreen);

代码解析

  1. HTML 结构

    • 保持现有的结构,确保有一个全屏按钮 ()。
  2. CSS 样式

    • 保持现有的样式,确保全屏按钮和其他控件美观。
  3. JavaScript 逻辑

    • launchFullScreen 函数:实现全屏播放。使用反射调用方法来确保在不同浏览器中都能正确执行全屏操作。
    • exitFullScreen 函数:实现退出全屏。同样使用反射调用方法来确保在不同浏览器中都能正确执行退出全屏操作。
    • toggleFullScreen 函数:根据当前是否处于全屏状态,调用 launchFullScreenexitFullScreen 函数。
    • 事件监听器:监听全屏按钮的点击事件,调用 toggleFullScreen 函数。

通过以上步骤,你可以实现一个功能更完善、用户体验更好的视频播放器,支持全屏播放和退出全屏功能。

css 实现各个页面样式设计

CSS(层叠样式表)是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。使用 CSS 可以有效地为网站的不同页面设计独特的样式,同时保持一致性和可维护性。以下是一些基本的步骤和技巧,帮助你用 CSS 实现各个页面的样式设计:

1. 基础设置

  • 重置浏览器默认样式:不同的浏览器对某些 HTML 元素有自己的一套默认样式,这可能会导致跨浏览器的显示差异。使用一个 CSS 重置文件(如 Eric Meyer Reset 或 Normalize.css)可以帮助消除这些差异。
  • 定义全局样式:为整个网站定义一套基础的字体、颜色、边距等样式,确保网站风格统一。

2. 针对不同页面的样式设计

  • 使用类选择器或 ID 选择器:为特定页面的元素分配唯一的类名或 ID,然后在 CSS 中针对这些类名或 ID 编写样式规则。
  • 利用 CSS 预处理器:使用 Sass、Less 等 CSS 预处理器可以更方便地管理复杂的样式表,比如通过变量来存储常用的色彩值、字体大小等。
  • 模块化设计:将网站的布局分为头部、导航栏、主体内容区、侧边栏、底部等模块,分别给它们设置样式。这样即使页面内容变化,整体布局也能保持一致。

3. 响应式设计

  • 媒体查询:利用媒体查询(@media)根据设备屏幕大小应用不同的样式。这对于确保网站在手机、平板电脑和桌面计算机上都能良好显示至关重要。
  • 灵活的网格布局:使用 flexbox 或 grid 布局模型创建响应式的布局,使得内容能够自动适应不同尺寸的屏幕。

4. 动画与过渡效果

  • 添加动画 :使用 CSS3 的transitionanimation属性为网站元素添加平滑的过渡效果或动画,提升用户体验。
  • 考虑性能:避免过度使用复杂的动画,特别是在移动设备上,因为这可能会影响页面加载速度和电池寿命。

5. 测试与优化

  • 跨浏览器测试:确保你的网站在主流浏览器(如 Chrome、Firefox、Safari 和 Edge)中都能正常工作。
  • 性能优化:压缩 CSS 文件,减少 HTTP 请求,使用 CDN 加速资源加载等方法来提高网站性能。

示例代码

假设我们有一个首页和一个关于我们页,下面是如何为这两个页面设置不同样式的简单示例:


body {
    font-family: Arial, sans-serif;
    color: #333;
    background-color: #f4f4f4;
}


.home .hero-banner {
    background-image: url('images/home-hero.jpg');
    height: 500px;
    text-align: center;
    padding-top: 100px;
}


.about-us .team-intro {
    background-color: #fff;
    padding: 50px;
    margin: 20px;
}

在这个例子中,.home.about-us 是页面级别的类,可以根据需要应用于每个页面的顶级容器。通过这种方式,你可以轻松地为不同的页面定制样式,同时保持全局样式的一致性。
当然,我们可以进一步深入探讨一些具体的实践和技术细节,以帮助你更好地理解和应用 CSS 来设计各个页面的样式。接下来,我们将从以下几个方面进行详细说明:

6. 使用 BEM 命名法

BEM(Block Element Modifier)是一种流行的 CSS 命名约定,有助于团队协作和代码的可读性。它通过清晰的命名规则来表示组件及其状态,从而避免了 CSS 选择器冲突的问题。

示例:

div class="card">
  img src="image.jpg" alt="Card Image" class="card__image">
  div class="card__content">
    h2 class="card__title">Card Titleh2>
    p class="card__description">This is the card description.p>
  div>
div>


.card {
  border: 1px solid #ccc;
  border-radius: 8px;
  overflow: hidden;
  width: 300px;
}

.card__image {
  width: 100%;
  height: auto;
}

.card__content {padding: 16px;}

.card__title {
  font-size: 1.5em;
  margin-bottom: 8px;
}

.card__description {
  font-size: 1em;
  line-height: 1.5;
}

7. 使用 CSS 框架

CSS 框架如 Bootstrap、Tailwind CSS 等提供了丰富的预设样式和组件,可以帮助快速搭建页面布局和样式。这些框架通常具有良好的响应式设计支持,可以节省大量时间和精力。

Bootstrap 示例:
DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  meta name="viewport" content="width=device-width, initial-scale=1.0">
  link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
  title>Bootstrap Exampletitle>
head>
body>
  div class="container mt-5">
    div class="row">
      div class="col-md-8">
        h1>Welcome to Our Websiteh1>
        p>This is a simple example using Bootstrap.p>
      div>
      div class="col-md-4">
        div class="card">
          div class="card-body">
            h5 class="card-title">Sidebar Contenth5>
            p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.p>
          div>
        div>
      div>
    div>
  div>
  script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js">script>
body>
html>

8. 使用 CSS 变量

CSS 变量(也称为自定义属性)允许你在 CSS 中定义可复用的值。这在处理颜色主题、间距等时非常有用,可以轻松地在整个项目中更改这些值。

示例:
:root {
  --primary-color: #007bff;
  --secondary-color: #6c757d;
  --font-size-base: 16px;
}

body {
  font-size: var(--font-size-base);
  color: var(--secondary-color);
}

.button-primary {
  background-color: var(--primary-color);
  color: white;
  padding: 10px 20px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.button-primary:hover {
  background-color: darken(var(--primary-color), 10%);
}

9. 使用 CSS Grid 和 Flexbox

CSS Grid 和 Flexbox 是现代 CSS 布局技术,可以创建复杂且响应式的布局,而无需依赖浮动和定位等传统方法。

Grid 示例:
.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
  padding: 20px;
}

.item {
  background-color: #f4f4f4;
  padding: 20px;
  border-radius: 8px;
}
Flexbox 示例:
.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #333;
  color: white;
  padding: 10px 20px;
}

.navbar a {
  color: white;
  text-decoration: none;
  margin: 0 10px;
}

10. 优化加载性能

  • 使用 CSS Sprites:将多个小图标合并成一张大图,减少 HTTP 请求次数。
  • 懒加载图片:对于非首屏图片,使用懒加载技术,当用户滚动到该区域时再加载图片。
  • 压缩 CSS 文件:使用工具如 UglifyCSS、Clean-CSS 等压缩 CSS 文件,减小文件大小。

11. 可访问性

  • 确保足够的对比度:文本和背景之间的对比度应该足够高,以便色盲或其他视觉障碍的用户也能轻松阅读。
  • 提供键盘导航:确保网站的所有功能都可以通过键盘操作。
  • 使用 ARIA 标签:为动态内容和复杂组件提供额外的语义信息,帮助屏幕阅读器用户理解页面结构。

图片轮转案例的实现

实现图片轮转(也称为幻灯片或轮播图)是前端开发中的常见需求。这里我将向你展示如何使用纯 CSS 和 JavaScript 来实现一个简单的图片轮转效果。这个示例将包括 HTML、CSS 和 JavaScript 三部分。

1. HTML 结构

首先,我们需要创建一个包含多张图片的基本 HTML 结构。每张图片将被包裹在一个

中,并赋予相应的类名。

DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  meta name="viewport" content="width=device-width, initial-scale=1.0">
  title>Image Slidertitle>
  link rel="stylesheet" href="styles.css">
head>
body>
  div class="slider">
    div class="slides">
      div class="slide" style="background-image: url('image1.jpg');">div>
      div class="slide" style="background-image: url('image2.jpg');">div>
      div class="slide" style="background-image: url('image3.jpg');">div>
    div>
  div>
  script src="script.js">script>
body>
html>

2. CSS 样式

接下来,我们使用 CSS 来设置轮播图的基本样式。这里我们将使用 flexbox 来实现居中对齐,并使用 transition 来实现平滑的过渡效果。


body, html {
  margin: 0;
  padding: 0;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #f4f4f4;
}

.slider {
  width: 80%;
  max-width: 800px;
  height: 400px;
  overflow: hidden;
  position: relative;
}

.slides {
  display: flex;
  transition: transform 0.5s ease-in-out;
}

.slide {
  min-width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
}

3. JavaScript 功能

最后,我们使用 JavaScript 来实现图片的自动轮播和手动切换功能。


document.addEventListener('DOMContentLoaded', () => {
  const slides = document.querySelectorAll('.slide');
  const totalSlides = slides.length;
  let currentSlide = 0;

  function showSlide(index) {
    if (index >= totalSlides) {
      index = 0;
    } else if (index  0) {
      index = totalSlides - 1;
    }
    currentSlide = index;
    const offset = -currentSlide * 100;
    document.querySelector('.slides').style.transform = `translateX(${offset}%)`;
  }

  
  setInterval(() => {
    currentSlide++;
    showSlide(currentSlide);
  }, 3000);

  
  document.getElementById('prev').addEventListener('click', () => {
    currentSlide--;
    showSlide(currentSlide);
  });

  document.getElementById('next').addEventListener('click', () => {
    currentSlide++;
    showSlide(currentSlide);
  });
});

4. 添加手动切换按钮(可选)

如果你想添加手动切换按钮,可以在 HTML 中添加两个按钮,并在 CSS 中进行样式设置。


button id="prev">Prevbutton>
button id="next">Nextbutton>

button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  border: none;
  padding: 10px 20px;
  cursor: pointer;
}

#prev {
  left: 10px;
}

#next {
  right: 10px;
}

总结

通过以上步骤,你就可以实现一个简单的图片轮转效果。这个示例使用了 CSS 来处理样式和过渡效果,使用 JavaScript 来控制图片的切换逻辑。你可以根据需要进一步扩展和优化这个示例,例如添加更多的交互功能、响应式设计等。

当然,我们可以进一步完善和扩展这个图片轮转示例,增加一些高级功能和优化。以下是几个常见的改进点:

5. 增加指示器

指示器可以帮助用户了解当前显示的是哪一张图片,并提供点击切换的功能。

HTML

在 HTML 中添加指示器:

DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  meta name="viewport" content="width=device-width, initial-scale=1.0">
  title>Image Slidertitle>
  link rel="stylesheet" href="styles.css">
head>
body>
  div class="slider">
    div class="slides">
      div class="slide" style="background-image: url('image1.jpg');">div>
      div class="slide" style="background-image: url('image2.jpg');">div>
      div class="slide" style="background-image: url('image3.jpg');">div>
    div>
    div class="indicators">
      span class="indicator active" data-index="0">span>
      span class="indicator" data-index="1">span>
      span class="indicator" data-index="2">span>
    div>
  div>
  button id="prev">Prevbutton>
  button id="next">Nextbutton>
  script src="script.js">script>
body>
html>
CSS

为指示器添加样式:


body, html {
  margin: 0;
  padding: 0;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #f4f4f4;
}

.slider {
  width: 80%;
  max-width: 800px;
  height: 400px;
  overflow: hidden;
  position: relative;
}

.slides {
  display: flex;
  transition: transform 0.5s ease-in-out;
}

.slide {
  min-width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
}

.indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 5px;
}

.indicator {
  width: 10px;
  height: 10px;
  background-color: #fff;
  border-radius: 50%;
  cursor: pointer;
  opacity: 0.5;
}

.indicator.active {
  opacity: 1;
}

button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  border: none;
  padding: 10px 20px;
  cursor: pointer;
}

#prev {
  left: 10px;
}

#next {
  right: 10px;
}
JavaScript

更新 JavaScript 以处理指示器的点击事件:


document.addEventListener('DOMContentLoaded', () => {
  const slides = document.querySelectorAll('.slide');
  const indicators = document.querySelectorAll('.indicator');
  const totalSlides = slides.length;
  let currentSlide = 0;

  function showSlide(index) {
    if (index >= totalSlides) {
      index = 0;
    } else if (index  0) {
      index = totalSlides - 1;
    }
    currentSlide = index;
    const offset = -currentSlide * 100;
    document.querySelector('.slides').style.transform = `translateX(${offset}%)`;

    
    indicators.forEach((indicator, i) => {
      indicator.classList.remove('active');
      if (i === currentSlide) {
        indicator.classList.add('active');
      }
    });
  }

  
  let interval = setInterval(() => {
    currentSlide++;
    showSlide(currentSlide);
  }, 3000);

  
  document.getElementById('prev').addEventListener('click', () => {
    clearInterval(interval);
    currentSlide--;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });

  document.getElementById('next').addEventListener('click', () => {
    clearInterval(interval);
    currentSlide++;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });

  
  indicators.forEach(indicator => {
    indicator.addEventListener('click', () => {
      clearInterval(interval);
      const newIndex = parseInt(indicator.getAttribute('data-index'));
      showSlide(newIndex);
      interval = setInterval(() => {
        currentSlide++;
        showSlide(currentSlide);
      }, 3000);
    });
  });
});

6. 响应式设计

为了确保轮播图在不同设备上都能良好显示,我们可以添加一些响应式样式。

CSS

@media (max-width: 600px) {
  .slider {
    width: 90%;
    height: 300px;
  }

  .indicators {
    bottom: 5px;
  }

  button {
    padding: 8px 15px;
  }
}

7. 触摸滑动支持

为了让轮播图在触摸设备上也能流畅滑动,我们可以使用 Hammer.js 库来添加触摸滑动支持。

HTML

引入 Hammer.js 库:

script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js">script>
JavaScript

更新 JavaScript 以处理触摸滑动事件:


document.addEventListener('DOMContentLoaded', () => {
  const slides = document.querySelectorAll('.slide');
  const indicators = document.querySelectorAll('.indicator');
  const totalSlides = slides.length;
  let currentSlide = 0;

  function showSlide(index) {
    if (index >= totalSlides) {
      index = 0;
    } else if (index  0) {
      index = totalSlides - 1;
    }
    currentSlide = index;
    const offset = -currentSlide * 100;
    document.querySelector('.slides').style.transform = `translateX(${offset}%)`;

    
    indicators.forEach((indicator, i) => {
      indicator.classList.remove('active');
      if (i === currentSlide) {
        indicator.classList.add('active');
      }
    });
  }

  
  let interval = setInterval(() => {
    currentSlide++;
    showSlide(currentSlide);
  }, 3000);

  
  document.getElementById('prev').addEventListener('click', () => {
    clearInterval(interval);
    currentSlide--;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });

  document.getElementById('next').addEventListener('click', () => {
    clearInterval(interval);
    currentSlide++;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });

  
  indicators.forEach(indicator => {
    indicator.addEventListener('click', () => {
      clearInterval(interval);
      const newIndex = parseInt(indicator.getAttribute('data-index'));
      showSlide(newIndex);
      interval = setInterval(() => {
        currentSlide++;
        showSlide(currentSlide);
      }, 3000);
    });
  });

  
  const slider = document.querySelector('.slider');
  const hammer = new Hammer(slider);
  hammer.on('swipeleft', () => {
    clearInterval(interval);
    currentSlide++;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });

  hammer.on('swiperight', () => {
    clearInterval(interval);
    currentSlide--;
    showSlide(currentSlide);
    interval = setInterval(() => {
      currentSlide++;
      showSlide(currentSlide);
    }, 3000);
  });
});

总结

通过以上步骤,你已经实现了一个功能较为完善的图片轮转效果,包括自动轮播、手动切换按钮、指示器、响应式设计和触摸滑动支持

网页课程表的实现

创建一个网页课程表是一个很好的练习,可以帮助你熟悉 HTML、CSS 和 JavaScript 的基础知识。下面是一个完整的示例,展示了如何实现一个简单的网页课程表。这个示例包括了 HTML 结构、CSS 样式和 JavaScript 功能。

1. HTML 结构

首先,我们需要创建一个基本的 HTML 结构来展示课程表。我们将使用表格来组织数据。

DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  meta name="viewport" content="width=device-width, initial-scale=1.0">
  title>Course Scheduletitle>
  link rel="stylesheet" href="styles.css">
head>
body>
  h1>Weekly Course Scheduleh1>
  table class="schedule">
    thead>
      tr>
        th>Timeth>
        th>Mondayth>
        th>Tuesdayth>
        th>Wednesdayth>
        th>Thursdayth>
        th>Fridayth>
      tr>
    thead>
    tbody>
      tr>
        td>08:00 - 09:30td>
        td>Mathtd>
        td>Physicstd>
        td>Chemistrytd>
        td>Mathtd>
        td>Physicstd>
      tr>
      tr>
        td>09:45 - 11:15td>
        td>Historytd>
        td>Biologytd>
        td>Englishtd>
        td>Historytd>
        td>Biologytd>
      tr>
      tr>
        td>11:30 - 13:00td>
        td>Arttd>
        td>Musictd>
        td>PEtd>
        td>Arttd>
        td>Musictd>
      tr>
      tr>
        td>13:00 - 14:30td>
        td>Lunchtd>
        td>Lunchtd>
        td>Lunchtd>
        td>Lunchtd>
        td>Lunchtd>
      tr>
      tr>
        td>14:45 - 16:15td>
        td>Computer Sciencetd>
        td>Geographytd>
        td>Spanishtd>
        td>Computer Sciencetd>
        td>Geographytd>
      tr>
    tbody>
  table>
  script src="script.js">script>
body>
html>

2. CSS 样式

接下来,我们使用 CSS 来美化课程表。我们将设置表格的边框、背景色、文字颜色等。


body {
  font-family: Arial, sans-serif;
  background-color: #f4f4f4;
  margin: 0;
  padding: 20px;
}

h1 {
  text-align: center;
  color: #333;
}

.schedule {
  width: 100%;
  max-width: 800px;
  margin: 0 auto;
  border-collapse: collapse;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

.schedule th, .schedule td {
  border: 1px solid #ddd;
  padding: 12px;
  text-align: center;
}

.schedule th {
  background-color: #007bff;
  color: white;
  font-weight: bold;
}

.schedule tr:nth-child(even) {
  background-color: #f9f9f9;
}

.schedule tr:hover {
  background-color: #eaeaea;
}

.schedule .lunch {
  background-color: #ffcc00;
  color: #333;
}

3. JavaScript 功能

最后,我们使用 JavaScript 来增强课程表的交互性。例如,当鼠标悬停在某个单元格上时,可以显示更多信息。


document.addEventListener('DOMContentLoaded', () => {
  const cells = document.querySelectorAll('.schedule td');

  cells.forEach(cell => {
    cell.addEventListener('mouseover', () => {
      cell.style.backgroundColor = '#d1ecf1';
      cell.style.color = '#0c5460';
    });

    cell.addEventListener('mouseout', () => {
      cell.style.backgroundColor = '';
      cell.style.color = '';
    });
  });
});

4. 响应式设计

为了确保课程表在不同设备上都能良好显示,我们可以添加一些响应式样式。


@media (max-width: 768px) {
  .schedule {
    font-size: 14px;
  }

  .schedule th, .schedule td {
    padding: 8px;
  }
}

总结

通过以上步骤,你已经实现了一个简单的网页课程表,包括了 HTML 结构、CSS 样式和 JavaScript 功能。这个示例展示了如何使用表格来组织数据,并通过 CSS 和 JavaScript 来增强其美观性和交互性。

javascript 实现交互功能

JavaScript 是一种强大的编程语言,它允许网页开发者添加交互性到他们的网站上。通过与文档对象模型(Document Object Model, DOM)交互,JavaScript 可以改变网页上的内容、样式以及响应用户的操作。下面是一些使用 JavaScript 和 DOM 实现基本交互功能的例子。

1. 改变元素内容

如果你想在用户点击按钮后改变某个 HTML 元素的内容,可以这样做:

DOCTYPE html>
html>
body>

h2 id="demo">原始文本h2>

button onclick="changeContent()">点击我button>

script>
function changeContent() {
  document.getElementById("demo").innerHTML = "新文本";
}
script>

body>
html>

2. 显示 / 隐藏元素

你可以创建一个按钮来显示或隐藏页面上的元素:

DOCTYPE html>
html>
body>

div id="myDiv" style="width:200px;height:100px;background-color:lightblue;">
  我是一个可以被隐藏的 div。div>

button onclick="toggleVisibility()">点击切换显示 / 隐藏button>

script>
function toggleVisibility() {
  var x = document.getElementById("myDiv");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}
script>

body>
html>

3. 动态更改样式

如果你想根据用户的动作动态地改变元素的样式,可以这样做:

DOCTYPE html>
html>
body>

p id="stylePara" style="color:black;">这段文字的颜色会变化。p>

button onclick="changeColor()">点击改变颜色button>

script>
function changeColor() {
  var element = document.getElementById("stylePara");
  if (element.style.color === "black") {
    element.style.color = "red";
  } else {
    element.style.color = "black";
  }
}
script>

body>
html>

4. 添加 / 移除类

有时候,你可能想要根据用户的操作为元素添加或移除 CSS 类:

DOCTYPE html>
html>
head>
style>
.active {
  background-color: yellow;
  font-weight: bold;
}
style>
head>
body>

p id="classListExample">点击按钮为我添加或移除 'active' 类。p>

button onclick="toggleClass()">点击切换类button>

script>
function toggleClass() {
  var element = document.getElementById("classListExample");
  element.classList.toggle("active");
}
script>

body>
html>

当然,我们可以进一步探讨一些更高级的 DOM 操作和 JavaScript 技术,比如事件监听器、表单验证、AJAX 请求等。下面是几个示例:

5. 使用事件监听器

事件监听器允许你以非侵入式的方式绑定事件处理程序。这意味着你的 HTML 代码将更加干净,逻辑和标记分离。

DOCTYPE html>
html>
body>

h2>使用 addEventListener 监听点击事件h2>

button id="myBtn">点击我button>

p id="demo">p>

script>
document.getElementById("myBtn").addEventListener("click", function() {
  document.getElementById("demo").innerHTML = "Hello World";
});
script>

body>
html>

6. 表单验证

表单验证是确保用户输入有效数据的重要步骤。这里有一个简单的例子,用于检查输入框是否为空。

DOCTYPE html>
html>
body>

form id="myForm">
  label for="name">姓名:label>
  input type="text" id="name" name="name">
  input type="submit" value="提交">
form>

p id="error" style="color:red;">p>

script>
document.getElementById("myForm").addEventListener("submit", function(event) {
  var name = document.getElementById("name").value;
  if (name === "") {
    event.preventDefault(); 
    document.getElementById("error").innerText = "姓名不能为空!";
  } else {
    document.getElementById("error").innerText = "";
  }
});
script>

body>
html>

7. AJAX 请求

AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,能够更新部分网页的技术。这里是如何使用原生 JavaScript 发送 AJAX 请求的一个简单例子:

DOCTYPE html>
html>
body>

h2>AJAX 示例h2>

button onclick="loadData()">请求数据button>

p id="ajaxResponse">p>

script>
function loadData() {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("ajaxResponse").innerHTML = this.responseText;
    }
  };
  xhr.open("GET", "https://api.example.com/data", true);
  xhr.send();
}
script>

body>
html>

请注意,在这个 AJAX 示例中,你需要替换 "https://api.example.com/data" 为实际的 API 端点。此外,现代 Web 开发中通常会使用如 fetch API 或者第三方库如 Axios 来进行网络请求,这些方法提供了更简洁的语法和支持更多的特性。

8. 使用 fetch API

fetch 是一个现代的、基于 Promise 的 HTTP 请求 API,它简化了异步请求的编写:

DOCTYPE html>
html>
body>

h2>使用 Fetch API 请求数据h2>

button onclick="fetchData()">请求数据button>

p id="fetchResponse">p>

script>
function fetchData() {
  fetch('https://api.example.com/data')
    .then(response => response.text())
    .then(data => {
      document.getElementById("fetchResponse").innerHTML = data;
    })
    .catch(error => console.error('Error:', error));
}
script>

body>
html>

好的,我们可以继续深入探讨一些更高级的主题,例如:

9. 动态创建和插入元素

动态创建和插入元素是构建动态用户界面的重要技能。以下是一个示例,展示如何使用 JavaScript 动态创建并插入一个新的列表项:

DOCTYPE html>
html>
body>

h2>动态创建和插入元素h2>

ul id="myList">
  li>项目 1li>
  li>项目 2li>
ul>

button onclick="addListItem()">添加项目button>

script>
function addListItem() {
  var ul = document.getElementById("myList");
  var li = document.createElement("li"); 
  li.textContent = "新项目"; 
  ul.appendChild(li); 
}
script>

body>
html>

10. 拖放功能

拖放功能可以让用户通过拖动元素来完成某些操作,例如重新排序或移动项目。以下是一个简单的拖放示例:

DOCTYPE html>
html>
body>

h2>拖放功能示例h2>

div id="draggable" draggable="true" ondragstart="dragStart(event)" style="width:100px;height:100px;background-color:lightblue;text-align:center;line-height:100px;">拖动我div>

div id="dropzone" ondragover="allowDrop(event)" ondrop="drop(event)" style="width:200px;height:200px;border:1px solid black;">div>

script>
function dragStart(event) {
  event.dataTransfer.setData("text", event.target.id); 
}

function allowDrop(event) {
  event.preventDefault(); 
}

function drop(event) {
  event.preventDefault();
  var data = event.dataTransfer.getData("text"); 
  event.target.appendChild(document.getElementById(data)); 
}
script>

body>
html>

11. 本地存储 (Local Storage)

本地存储允许你在用户的浏览器中保存数据,即使用户关闭浏览器或重新启动计算机,数据仍然存在。以下是一个简单的示例,展示如何使用本地存储来保存和读取数据:

DOCTYPE html>
html>
body>

h2>本地存储示例h2>

label for="name">姓名:label>
input type="text" id="name" name="name">
button onclick="saveName()">保存姓名button>

p id="greeting">p>

script>
function saveName() {
  var name = document.getElementById("name").value;
  localStorage.setItem("savedName", name); 
  showGreeting();
}

function showGreeting() {
  var savedName = localStorage.getItem("savedName"); 
  if (savedName) {
    document.getElementById("greeting").innerText = "你好," + savedName + "!";
  } else {
    document.getElementById("greeting").innerText = "";
  }
}


window.onload = showGreeting;
script>

body>
html>

12. 响应键盘事件

响应键盘事件可以让你根据用户的按键操作执行特定的功能。以下是一个简单的示例,展示如何监听键盘事件:

DOCTYPE html>
html>
body>

h2>响应键盘事件示例h2>

p id="keyInfo">p>

script>
document.addEventListener("keydown", function(event) {
  var keyInfo = "你按下了键码为" + event.keyCode + "的键。";
  document.getElementById("keyInfo").innerText = keyInfo;
});
script>

body>
html>

13. 定时器 (setTimeout 和 setInterval)

定时器可以让你在指定的时间后执行某个函数,或者定期执行某个函数。以下是一个简单的示例,展示如何使用 setTimeoutsetInterval

DOCTYPE html>
html>
body>

h2>定时器示例h2>

p id="timer">p>

script>
var count = 0;


setTimeout(function() {
  document.getElementById("timer").innerText = "2 秒后执行了一次";
}, 2000);


var intervalId = setInterval(function() {
  count++;
  document.getElementById("timer").innerText = "计数:" + count;
}, 1000);


setTimeout(function() {
  clearInterval(intervalId);
  document.getElementById("timer").innerText += "- 定时器已停止";
}, 5000);
script>

body>
html>

JQuery 库

jQuery 是一个快速、小巧且功能丰富的库。它使 HTML 文档遍历、事件处理、动画和 Ajax 交互变得非常简单。下面是一些使用 jQuery 实现常见功能的示例。

1. 引入 jQuery

首先,你需要在你的 HTML 文件中引入 jQuery 库。可以通过 CDN 来引入:

DOCTYPE html>
html>
head>
  title>jQuery 示例title>
  
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  h1>欢迎使用 jQueryh1>
  button id="btn1">点击我button>

  script>
    $(document).ready(function() {
      
      $("#btn1").click(function() {
        alert("按钮被点击了!");
      });
    });
  script>
body>
html>

2. 改变元素内容

使用 jQuery 改变元素的内容非常简单:

DOCTYPE html>
html>
head>
  title>改变元素内容title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  h2 id="demo">原始文本h2>
  button id="changeText">点击我button>

  script>
    $(document).ready(function() {
      $("#changeText").click(function() {
        $("#demo").text("新文本");
      });
    });
  script>
body>
html>

3. 显示 / 隐藏元素

使用 jQuery 可以轻松地显示或隐藏元素:

DOCTYPE html>
html>
head>
  title>显示 / 隐藏元素title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  div id="myDiv" style="width:200px;height:100px;background-color:lightblue;">
    我是一个可以被隐藏的 div。div>
  button id="toggleBtn">点击切换显示 / 隐藏button>

  script>
    $(document).ready(function() {
      $("#toggleBtn").click(function() {
        $("#myDiv").toggle();
      });
    });
  script>
body>
html>

4. 动态更改样式

使用 jQuery 可以轻松地动态更改元素的样式:

DOCTYPE html>
html>
head>
  title>动态更改样式title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  p id="stylePara" style="color:black;">这段文字的颜色会变化。p>
  button id="changeColorBtn">点击改变颜色button>

  script>
    $(document).ready(function() {
      $("#changeColorBtn").click(function() {
        $("#stylePara").css("color", function(index, currentColor) {
          return currentColor === "black" ? "red" : "black";
        });
      });
    });
  script>
body>
html>

5. 添加 / 移除类

使用 jQuery 可以轻松地为元素添加或移除类:

DOCTYPE html>
html>
head>
  title>添加 / 移除类title>
  style>
    .active {
      background-color: yellow;
      font-weight: bold;
    }
  style>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  p id="classListExample">点击按钮为我添加或移除 'active' 类。p>
  button id="toggleClassBtn">点击切换类button>

  script>
    $(document).ready(function() {
      $("#toggleClassBtn").click(function() {
        $("#classListExample").toggleClass("active");
      });
    });
  script>
body>
html>

6. 表单验证

使用 jQuery 进行表单验证也很方便:

DOCTYPE html>
html>
head>
  title>表单验证title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  form id="myForm">
    label for="name">姓名:label>
    input type="text" id="name" name="name">
    input type="submit" value="提交">
  form>
  p id="error" style="color:red;">p>

  script>
    $(document).ready(function() {
      $("#myForm").submit(function(event) {
        var name = $("#name").val();
        if (name === "") {
          event.preventDefault(); 
          $("#error").text("姓名不能为空!");
        } else {
          $("#error").text("");
        }
      });
    });
  script>
body>
html>

7. AJAX 请求

使用 jQuery 进行 AJAX 请求也非常简单:

DOCTYPE html>
html>
head>
  title>AJAX 请求title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  h2>AJAX 示例h2>
  button id="requestDataBtn">请求数据button>
  p id="ajaxResponse">p>

  script>
    $(document).ready(function() {
      $("#requestDataBtn").click(function() {
        $.ajax({
          url: "https://api.example.com/data",
          method: "GET",
          success: function(data) {
            $("#ajaxResponse").text(data);
          },
          error: function(xhr, status, error) {
            console.error("Error:", error);
          }
        });
      });
    });
  script>
body>
html>

8. 动态创建和插入元素

使用 jQuery 动态创建和插入元素也很直观:

DOCTYPE html>
html>
head>
  title>动态创建和插入元素title>
  script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
head>
body>
  h2>动态创建和插入元素h2>
  ul id="myList">
    li>项目 1li>
    li>项目 2li>
  ul>
  button id="addListItemBtn">添加项目button>

  script>
    $(document).ready(function() {
      $("#addListItemBtn").click(function() {
        $("
  • 新项目
  • "
    ).appendTo("#myList"); }); });
    script> body> html>

    AJAX

    AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,能够更新部分网页的技术。虽然名字中有 XML,但 AJAX 技术实际上可以使用任何格式的数据,包括 JSON、HTML 等。

    1. 基本概念

    • 异步:AJAX 请求是异步的,这意味着请求发送后,用户可以继续与页面交互,而不需要等待服务器响应。
    • JavaScript:使用 JavaScript 来发送请求和处理响应。
    • XMLHttpRequest:这是浏览器提供的一个内置对象,用于发送 HTTP 请求。

    2. 使用原生 JavaScript 发送 AJAX 请求

    以下是一个使用原生 JavaScript 发送 GET 请求的示例:

    DOCTYPE html>
    html>
    head>
      title>AJAX 示例title>
    head>
    body>
    
    h2>AJAX 示例h2>
    button onclick="loadData()">请求数据button>
    p id="response">p>
    
    script>
    function loadData() {
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
          document.getElementById("response").innerHTML = xhr.responseText;
        }
      };
      xhr.open("GET", "https://api.example.com/data", true);
      xhr.send();
    }
    script>
    
    body>
    html>
    

    3. 使用 jQuery 发送 AJAX 请求

    jQuery 提供了更简洁的语法来发送 AJAX 请求。以下是一个使用 jQuery 发送 GET 请求的示例:

    DOCTYPE html>
    html>
    head>
      title>AJAX 示例title>
      script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
    head>
    body>
    
    h2>AJAX 示例h2>
    button id="requestDataBtn">请求数据button>
    p id="response">p>
    
    script>
    $(document).ready(function() {
      $("#requestDataBtn").click(function() {
        $.ajax({
          url: "https://api.example.com/data",
          method: "GET",
          success: function(data) {
            $("#response").text(data);
          },
          error: function(xhr, status, error) {
            console.error("Error:", error);
          }
        });
      });
    });
    script>
    
    body>
    html>
    

    4. 发送 POST 请求

    发送 POST 请求时,通常需要传递一些数据到服务器。以下是使用原生 JavaScript 和 jQuery 发送 POST 请求的示例。

    原生 JavaScript
    DOCTYPE html>
    html>
    head>
      title>AJAX POST 示例title>
    head>
    body>
    
    h2>AJAX POST 示例h2>
    button onclick="postData()">发送数据button>
    p id="response">p>
    
    script>
    function postData() {
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
          document.getElementById("response").innerHTML = xhr.responseText;
        }
      };
      xhr.open("POST", "https://api.example.com/post", true);
      xhr.setRequestHeader("Content-Type", "application/json");
      xhr.send(JSON.stringify({ name: "John", age: 30 }));
    }
    script>
    
    body>
    html>
    
    jQuery
    DOCTYPE html>
    html>
    head>
      title>AJAX POST 示例title>
      script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
    head>
    body>
    
    h2>AJAX POST 示例h2>
    button id="postDataBtn">发送数据button>
    p id="response">p>
    
    script>
    $(document).ready(function() {
      $("#postDataBtn").click(function() {
        $.ajax({
          url: "https://api.example.com/post",
          method: "POST",
          contentType: "application/json",
          data: JSON.stringify({ name: "John", age: 30 }),
          success: function(data) {
            $("#response").text(data);
          },
          error: function(xhr, status, error) {
            console.error("Error:", error);
          }
        });
      });
    });
    script>
    
    body>
    html>
    

    5. 处理 JSON 数据

    服务器返回的数据通常是 JSON 格式的。以下是一个处理 JSON 数据的示例:

    DOCTYPE html>
    html>
    head>
      title>AJAX JSON 示例title>
      script src="https://code.jquery.com/jquery-3.6.0.min.js">script>
    head>
    body>
    
    h2>AJAX JSON 示例h2>
    button id="getJSONBtn">请求 JSON 数据button>
    p id="response">p>
    
    script>
    $(document).ready(function() {
      $("#getJSONBtn").click(function() {
        $.ajax({
          url: "https://api.example.com/json",
          method: "GET",
          dataType: "json",
          success: function(data) {
            $("#response").text("姓名:" + data.name + ", 年龄:" + data.age);
          },
          error: function(xhr, status, error) {
            console.error("Error:", error);
          }
        });
      });
    });
    script>
    
    body>
    html>
    

    6. 使用 fetch API 发送 AJAX 请求

    现代浏览器支持 fetch API,这是一个更现代的、基于 Promise 的 HTTP 请求 API。以下是一个使用 fetch 发送 GET 请求的示例:

    DOCTYPE html>
    html>
    head>
      title>Fetch API 示例title>
    head>
    body>
    
    h2>Fetch API 示例h2>
    button onclick="fetchData()">请求数据button>
    p id="response">p>
    
    script>
    function fetchData() {
      fetch('https://api.example.com/data')
        .then(response => response.text())
        .then(data => {
          document.getElementById("response").innerHTML = data;
        })
        .catch(error => console.error('Error:', error));
    }
    script>
    
    body>
    html>
    

    7. 使用 async/await 发送 AJAX 请求

    async/await 是处理异步操作的一种更简洁的方式。以下是一个使用 async/awaitfetch 发送 GET 请求的示例:

    DOCTYPE html>
    html>
    head>
      title>Async/Await 示例title>
    head>
    body>
    
    h2>Async/Await 示例h2>
    button onclick="fetchDataAsync()">请求数据button>
    p id="response">p>
    
    script>
    async function fetchDataAsync() {
      try {
        const response = await fetch('https://api.example.com/data');
        const data = await response.text();
        document.getElementById("response").innerHTML = data;
      } catch (error) {
        console.error('Error:', error);
      }
    }
    script>
    
    body>
    html>
    

    HTML5 实现 canvas 绘图

    HTML5 的 元素提供了一个可以绘制图形的区域。通过 JavaScript,你可以在 上绘制各种图形,包括线条、矩形、圆形、文本等。下面是一些基本的 绘图示例。

    1. 基本设置

    首先,你需要在 HTML 中定义一个 元素,并给它一个唯一的 ID,以便在 JavaScript 中引用它。

    DOCTYPE html>
    html>
    head>
      title>Canvas 绘图示例title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      
      var canvas = document.getElementById("myCanvas");
      
      var ctx = canvas.getContext("2d");
    
      
      ctx.fillStyle = "red";
      ctx.fillRect(10, 10, 100, 100);
    
      
      ctx.beginPath();
      ctx.arc(250, 250, 50, 0, Math.PI * 2, false);
      ctx.fillStyle = "blue";
      ctx.fill();
    
      
      ctx.beginPath();
      ctx.moveTo(10, 10);
      ctx.lineTo(250, 250);
      ctx.strokeStyle = "black";
      ctx.stroke();
    script>
    
    body>
    html>
    

    2. 绘制矩形

    你可以使用 fillRect 方法绘制填充矩形,使用 strokeRect 方法绘制边框矩形。

    DOCTYPE html>
    html>
    head>
      title>绘制矩形title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.fillStyle = "red";
      ctx.fillRect(10, 10, 100, 100);
    
      
      ctx.strokeStyle = "black";
      ctx.strokeRect(120, 10, 100, 100);
    script>
    
    body>
    html>
    

    3. 绘制圆形

    使用 arc 方法可以绘制圆形。arc 方法的参数包括圆心的坐标、半径、起始角度、结束角度和方向(顺时针或逆时针)。

    DOCTYPE html>
    html>
    head>
      title>绘制圆形title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.beginPath();
      ctx.arc(250, 250, 50, 0, Math.PI * 2, false);
      ctx.fillStyle = "blue";
      ctx.fill();
    
      
      ctx.beginPath();
      ctx.arc(250, 250, 70, 0, Math.PI * 2, false);
      ctx.strokeStyle = "black";
      ctx.stroke();
    script>
    
    body>
    html>
    

    4. 绘制直线

    使用 moveTolineTo 方法可以绘制直线。

    DOCTYPE html>
    html>
    head>
      title>绘制直线title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.beginPath();
      ctx.moveTo(10, 10);
      ctx.lineTo(250, 250);
      ctx.strokeStyle = "black";
      ctx.stroke();
    script>
    
    body>
    html>
    

    5. 绘制文本

    使用 fillText 方法可以在 上绘制文本。

    DOCTYPE html>
    html>
    head>
      title>绘制文本title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.font = "30px Arial";
      ctx.fillStyle = "black";
    
      
      ctx.fillText("Hello, Canvas!", 10, 50);
    script>
    
    body>
    html>
    

    6. 清除画布

    使用 clearRect 方法可以清除画布的一部分或全部内容。

    DOCTYPE html>
    html>
    head>
      title>清除画布title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    button onclick="clearCanvas()">清除画布button>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.fillStyle = "red";
      ctx.fillRect(10, 10, 100, 100);
    
      function clearCanvas() {
        
        ctx.clearRect(0, 0, canvas.width, canvas.height);
      }
    script>
    
    body>
    html>
    

    7. 绘制渐变色

    使用 createLinearGradient 方法可以创建线性渐变色。

    DOCTYPE html>
    html>
    head>
      title>绘制渐变色title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      var gradient = ctx.createLinearGradient(0, 0, 500, 0);
      gradient.addColorStop(0, "red");
      gradient.addColorStop(0.5, "yellow");
      gradient.addColorStop(1, "green");
    
      
      ctx.fillStyle = gradient;
      ctx.fillRect(0, 0, 500, 500);
    script>
    
    body>
    html>
    

    8. 绘制阴影

    使用 shadowColorshadowBlurshadowOffsetXshadowOffsetY 属性可以为图形添加阴影效果。

    DOCTYPE html>
    html>
    head>
      title>绘制阴影title>
    head>
    body>
    
    canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;">canvas>
    
    script>
      var canvas = document.getElementById("myCanvas");
      var ctx = canvas.getContext("2d");
    
      
      ctx.shadowColor = "rgba(0, 0, 0, 0.5)";
      ctx.shadowBlur = 10;
      ctx.shadowOffsetX = 5;
      ctx.shadowOffsetY = 5;
    
      
      ctx.fillStyle = "red";
      ctx.fillRect(10, 10, 100, 100);
    script>
    
    body>
    html>
    

    网页测试完整流程和类别

    网页测试是一个确保网站功能正常、用户体验良好、性能稳定的过程。它涉及到多个方面,包括但不限于功能性测试、兼容性测试、性能测试、安全测试等。下面是网页测试的完整流程和主要类别:

    测试流程

    1. 需求分析:理解项目需求文档,确定测试目标和范围。
    2. 测试计划:基于需求分析,制定详细的测试计划,包括测试策略、测试资源、时间表等。
    3. 设计测试用例:根据需求编写具体的测试用例,包括输入数据、预期结果等。
    4. 环境搭建:准备测试所需的软硬件环境,如服务器、数据库、浏览器等。
    5. 执行测试:按照测试用例执行测试,记录测试结果。
    6. 缺陷管理:发现并记录缺陷,提交给开发团队修复。
    7. 回归测试:修复后重新测试,确保问题已被解决且没有引入新的问题。
    8. 测试报告:汇总测试结果,撰写测试报告,评估软件质量。
    9. 上线前审查:对即将上线的版本进行最后的检查,确保满足所有发布标准。
    10. 持续监控:产品上线后继续监控其表现,收集用户反馈,为后续迭代提供依据。

    测试类别

    • 功能测试:验证网站的各项功能是否按预期工作,包括链接测试、表单测试、数据库连接测试等。
    • 兼容性测试:测试网站在不同浏览器(如 Chrome、Firefox、Safari 等)、操作系统、移动设备上的表现。
    • 响应式设计测试:确保网站能在不同屏幕尺寸上正确显示。
    • 性能测试:评估网站在高并发访问下的性能,包括加载速度、响应时间和资源消耗等。
    • 安全测试:检查网站是否存在安全漏洞,如 SQL 注入、XSS 攻击等。
    • 可用性测试:从用户体验的角度出发,评估网站的易用性,包括导航逻辑、页面布局、交互设计等。
    • 可访问性测试:确保网站能够被残障人士访问,符合相关的无障碍标准。
    • 国际化与本地化测试:验证网站是否支持多语言和地区设置。
    • SEO 测试:优化网站结构和内容,提高搜索引擎排名。
    • 恢复性测试:测试网站在遇到异常情况(如服务器崩溃)后的恢复能力。
    • 压力测试:通过模拟极端条件来测试网站的极限处理能力。

    每个测试类别都有其特定的目标和方法,综合运用这些测试可以帮助确保网站的质量和可靠性。在整个测试过程中,保持与开发团队的紧密沟通非常重要,这样可以及时解决问题,保证项目的顺利进行。

    原文地址: 前端知识整理(全屏播放器 CSS JavaScript 轮转播放 jquery 库 AJAX 画布 网页测试)

      正文完
       0
      Yojack
      版权声明:本篇文章由 Yojack 于2024-10-23发表,共计50374字。
      转载说明:
      1 本网站名称:优杰开发笔记
      2 本站永久网址:https://yojack.cn
      3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
      4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5 本站所有内容均可转载及分享, 但请注明出处
      6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
      7 站长邮箱:laylwenl@gmail.com
      评论(没有评论)