以下代码是作者收集整理仅供参考,如有问题欢迎大家在留言区批评指正;版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。希望我的文章能帮助到您!
DOM操作
JavaScript 的 DOM(文档对象模型)操作是前端开发中非常重要的一部分,它允许开发者通过脚本来访问和操作网页的元素和结构。以下是一些常用的 DOM 操作功能及其代码示例:
1. 获取元素
- 通过 ID 获取元素:
```javascript
var element = document.getElementById("elementId");
```
- 通过类名获取元素集合:
```javascript
var elements = document.getElementsByClassName("className");
```
- 通过标签名获取元素集合:
```javascript
var elements = document.getElementsByTagName("tagName");
```
- 通过 CSS 选择器获取第一个匹配的元素:
```javascript
var element = document.querySelector(".className #elementId");
```
- 通过 CSS 选择器获取所有匹配的元素:
```javascript
var elements = document.querySelectorAll(".className");
```
2. 创建元素
```javascript
var newElement = document.createElement("div");
newElement.className = "newClass";
newElement.id = "newId";
```
3. 添加元素
- 添加到 DOM 树中:
```javascript
document.body.appendChild(newElement);
```
- 插入到特定元素之前:
```javascript
parentElement.insertBefore(newElement, referenceElement);
```
4.删除元素
```javascript
var parentElement = document.getElementById("parentId");
var childElement = document.getElementById("childId");
parentElement.removeChild(childElement);
```
5. 克隆元素
```javascript
var clonedElement = element.cloneNode(true); // true 表示深拷贝,包括子元素
```
6.替换元素
```javascript
var newElement = document.createElement("div");
var oldElement = document.getElementById("oldId");
oldElement.parentNode.replaceChild(newElement, oldElement);
```
7.设置属性
```javascript
element.setAttribute("type", "text");
element.className = "newClass";
element.style.color = "red";
```
8. 获取属性
```javascript
var value = element.getAttribute("type");
var className = element.className;
var style = element.style.color;
```
9. 添加事件监听器
```javascript
element.addEventListener("click", function() {
alert("元素被点击");
});
```
10. 移除事件监听器
```javascript
var eventFunction = function() {
alert("元素被点击");
};
element.addEventListener("click", eventFunction);
// ...
element.removeEventListener("click", eventFunction);
```
11. 修改内容
- innerHTML:可以解析 HTML 标签
```javascript
element.innerHTML = "<span>新内容</span>";
```
- innerText:仅文本内容,不会解析 HTML 标签
```javascript
element.innerText = "新内容";
```
- textContent:与 innerText 类似,但不会触发重排(reflow)
```javascript
element.textContent = "新内容";
```
12.获取和设置样式
```javascript
// 获取样式
var style = window.getComputedStyle(element);
var backgroundColor = style.backgroundColor;
// 设置样式
element.style.backgroundColor = "blue";
```
13. 遍历元素
```javascript
var elements = document.querySelectorAll(".className");
elements.forEach(function(element) {
console.log(element);
});
```
这些是基本的 DOM 操作,实际开发中,根据不同的需求,可能会使用更复杂的操作和组合。
事件处理
JavaScript 中的事件处理允许开发者响应浏览器中的各种交互行为,如点击、按键、鼠标移动等。以下是一些常用的事件处理功能及其代码示例:
1. 点击事件(click)
```javascript
document.getElementById("myButton").addEventListener("click", function() {
alert("按钮被点击了!");
});
```
2. 鼠标悬停事件(mouseover 和 mouseout)
```javascript
document.getElementById("myDiv").addEventListener("mouseover", function() {
this.style.backgroundColor = "yellow";
});
document.getElementById("myDiv").addEventListener("mouseout", function() {
this.style.backgroundColor = "white";
});
```
3. 键盘事件(keydown、keyup 和 keypress)
```javascript
document.getElementById("myInput").addEventListener("keydown", function(event) {
console.log("按下了键:" + event.key);
});
document.getElementById("myInput").addEventListener("keyup", function(event) {
console.log("释放了键:" + event.key);
});
document.getElementById("myInput").addEventListener("keypress", function(event) {
console.log("键被按下并释放:" + event.key);
});
```
4. 表单事件(submit、change 和 input)
```javascript
document.getElementById("myForm").addEventListener("submit", function(event) {
event.preventDefault(); // 阻止表单默认提交行为
console.log("表单提交了!");
});
document.getElementById("mySelect").addEventListener("change", function(event) {
console.log("选项改变了:" + event.target.value);
});
document.getElementById("myInput").addEventListener("input", function(event) {
console.log("输入框内容改变了:" + event.target.value);
});
```
5.加载事件(load 和 DOMContentLoaded)
```javascript
window.addEventListener("load", function() {
console.log("页面完全加载完毕");
});
document.addEventListener("DOMContentLoaded", function() {
console.log("DOM 内容加载完毕");
});
```
6. 滚动事件(scroll)
```javascript
window.addEventListener("scroll", function() {
console.log("页面滚动了");
});
```
7. 调整大小事件(resize)
```javascript
window.addEventListener("resize", function() {
console.log("窗口大小改变了");
});
```
8.焦点事件(focus 和 blur)
```javascript
document.getElementById("myInput").addEventListener("focus", function() {
console.log("输入框获得焦点");
});
document.getElementById("myInput").addEventListener("blur", function() {
console.log("输入框失去焦点");
});
```
9. 触摸事件(touchstart、touchmove 和 touchend)
```javascript
document.getElementById("myElement").addEventListener("touchstart", function(event) {
console.log("触摸开始");
});
document.getElementById("myElement").addEventListener("touchmove", function(event) {
console.log("触摸移动");
});
document.getElementById("myElement").addEventListener("touchend", function(event) {
console.log("触摸结束");
});
```
10. 自定义事件
```javascript
var myEvent = new CustomEvent("myevent", {
detail: {
message: "这是一个自定义事件"
}
});
document.getElementById("myElement").addEventListener("myevent", function(event) {
console.log(event.detail.message);
});
document.getElementById("myElement").dispatchEvent(myEvent);
```
这些是常见的事件处理功能,实际开发中,根据不同的需求,可能会使用更复杂的事件绑定和解绑,以及事件委托等高级技巧。
异步处理
JavaScript 中的异步处理是非常重要的,因为它允许代码在等待长时间运行的操作(如网络请求、文件读写、定时任务等)时继续执行。以下是一些常用的异步处理功能及其代码示例:
1.回调函数(Callbacks)
```javascript
function fetchData(callback) {
setTimeout(() => {
callback("数据加载完成");
}, 2000);
}
fetchData(data => {
console.log(data);
});
```
2. Promise
```javascript
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("数据加载完成");
}, 2000);
});
}
fetchData()
.then(data => {
console.log(data);
return "第二步";
})
.then(step => {
console.log(step);
})
.catch(error => {
console.log(error);
});
```
3.async/await
```javascript
async function fetchData() {
return new Promise(resolve => {
setTimeout(() => {
resolve("数据加载完成");
}, 2000);
});
}
async function run() {
try {
const data = await fetchData();
console.log(data);
const step = await "第二步";
console.log(step);
} catch (error) {
console.log(error);
}
}
run();
```
4. Ajax(XMLHttpRequest)
```javascript
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
console.log(data);
}
};
xhr.send();
```
5. Fetch API
```javascript
fetch("https://api.example.com/data")
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('请求失败:', error));
```
6. async/await with Fetch API
```javascript
async function fetchData() {
try {
const response = await fetch("https://api.example.com/data");
const data = await response.json();
console.log(data);
} catch (error) {
console.error('请求失败:', error);
}
}
fetchData();
```
7.定时器(setTimeout 和 setInterval)
```javascript
// setTimeout
setTimeout(() => {
console.log("延迟执行");
}, 1000);
// setInterval
setInterval(() => {
console.log("每隔一段时间执行");
}, 2000);
```
8. 事件监听器(Event Listeners)
```javascript
document.getElementById("myButton").addEventListener("click", function() {
console.log("按钮被点击");
});
```
9.Worker API(Web Workers)
```javascript
// 主线程
var worker = new Worker("worker.js");
worker.postMessage("Hello World");
worker.onmessage = function(event) {
console.log(event.data);
};
// worker.js
self.onmessage = function(event) {
self.postMessage("收到消息:" + event.data);
};
```
10.Service Workers
```javascript
// 注册 Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
console.log('ServiceWorker 注册成功,范围为:', registration.scope);
}).catch(function(err) {
console.log('ServiceWorker 注册失败:', err);
});
}
```
这些是常见的异步处理功能,实际开发中,根据不同的需求,可能会使用更复杂的异步模式和控制流,例如使用 Promise.all 来同时处理多个异步操作,或者使用 async/await 来编写更清晰的异步代码。
表单验证
表单验证是JavaScript中常见的一项功能,用于确保用户输入的数据符合预期的格式和内容。以下是一些常用的表单验证功能及其代码示例:
1.邮箱验证
```javascript
function validateEmail(email) {
var re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
return re.test(String(email).toLowerCase());
}
```
2. 密码强度验证
```javascript
function validatePassword(password) {
var re = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
return re.test(password);
}
```
3. 手机号码验证(中国大陆)
```javascript
function validatePhoneNumber(phone) {
var re = /^1[3-9]\d{9}$/;
return re.test(phone);
}
```
4. 必填字段验证
```javascript
function validateRequired(field) {
return field.value.trim() !== "";
}
```
5.数字验证
```javascript
function validateNumber(number) {
var re = /^[0-9]+$/;
return re.test(number);
}
```
6. URL验证
```javascript
function validateURL(url) {
var re = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:[/?#]\S*)?$/i;
return re.test(url);
}
```
7. 日期验证
```javascript
function validateDate(date) {
var re = /^\d{4}-\d{2}-\d{2}$/;
if (!re.test(date)) return false;
var d = new Date(date);
return d instanceof Date && !isNaN(d);
}
```
8. 长度验证
```javascript
function validateLength(field, min, max) {
return field.value.length >= min && field.value.length <= max;
}
```
9. 身份证验证(中国大陆)
```javascript
function validateIDCard(idCard) {
var re = /^(?:\d{15}|\d{18})$/;
if (!re.test(idCard)) return false;
// 这里可以添加更复杂的身份证号码校验逻辑
return true;
}
```
10. 自定义正则表达式验证
```javascript
function validateCustom(field, regex) {
var re = new RegExp(regex);
return re.test(field.value);
}
```
在实际应用中,表单验证通常与DOM操作结合使用,以便在用户输入数据时提供即时的反馈。例如,可以在表单字段失去焦点时触发验证函数,并显示相应的错误消息。此外,还可以使用更高级的表单验证库,如Parsley.js、jQuery Validation Plugin等,以简化验证逻辑的实现。
前端组件和框架
JavaScript前端组件和框架是现代Web开发的基石,它们提供了一套结构和工具,帮助开发者创建复杂的前端应用程序。以下是一些流行的JavaScript前端框架和组件库及其功能代码示例:
1.React
- 创建一个简单的React组件:
```javascript
function HelloComponent(props) {
return <h1>Hello, {props.name}!</h1>;
}
```
2.Vue.js
- 创建一个简单的Vue组件:
```javascript
Vue.component('hello-component', {
props: ['name'],
template: '<h1>Hello, {{ name }}!</h1>'
});
```
3. Angular
- 创建一个简单的Angular组件:
```typescript
import { Component } from '@angular/core';
@Component({
selector: 'hello-component',
template: '<h1>Hello, {{ name }}!</h1>',
styleUrls: ['./hello.component.css']
})
export class HelloComponent {
name: string = 'World';
}
```
4. Bootstrap
- 使用Bootstrap的按钮组件:
```html
<button type="button" class="btn btn-primary">Primary</button>
```
5. jQuery
- 使用jQuery选择元素并修改其内容:
```javascript
$('#myElement').text('新内容');
```
6. React Bootstrap
- 在React中使用Bootstrap的按钮组件:
```javascript
import Button from 'react-bootstrap/Button';
function MyButton() {
return <Button variant="primary">Primary</Button>;
}
```
7.Vue Bootstrap
- 在Vue中使用Bootstrap的按钮组件:
```html
<b-button variant="primary">Primary</b-button>
```
8. Angular Material
- 在Angular中使用Angular Material的按钮组件:
```typescript
import { MatButtonModule } from '@angular/material/button';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
imports: [MatButtonModule]
})
export class AppComponent {
title = 'My App';
}
```
9. Redux
- 在React中使用Redux的状态管理:
```javascript
import { createStore } from 'redux';
const rootReducer = (state = {}, action) => {
switch (action.type) {
// 处理动作
default:
return state;
}
};
const store = createStore(rootReducer);
```
10. Vuex
- 在Vue中使用Vuex的状态管理:
```javascript
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
}
});
```
11. NgRx
- 在Angular中使用NgRx的状态管理:
```typescript
import { createAction, createReducer, on } from '@ngrx/store';
const increment = createAction('[Counter] Increment');
const initialState = 0;
const reducer = createReducer(
initialState,
on(increment, state => state + 1)
);
export function counterReducer(state, action) {
return reducer(state, action);
}
```
这些示例展示了如何使用不同的前端框架和组件库来创建和管理Web应用程序的各个方面。实际开发中,这些技术通常结合使用,以构建功能丰富、易于维护和扩展的前端应用程序。
图形和动画
JavaScript 可以用来创建各种图形和动画,以增强网页的交互性和视觉吸引力。以下是一些常用的图形和动画功能及其代码示例:
1. Canvas
- 绘制一个简单的矩形:
```javascript
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(0, 0, 150, 100);
```
2. SVG
- 创建一个简单的SVG圆形:
```html
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
```
3. CSS3 动画
- 使用CSS3实现一个简单的旋转动画:
```css
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.rotating-element {
animation: rotate 2s linear infinite;
}
```
4. CSS3 过渡
- 使用CSS3实现一个简单的颜色过渡效果:
```css
.transition-element {
transition: background-color 0.5s ease;
}
.transition-element:hover {
background-color: #FF0000;
}
```
5.requestAnimationFrame
- 使用requestAnimationFrame创建一个简单的动画循环:
```javascript
function animate() {
// 动画逻辑
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
```
6. GreenSock (GSAP)
- 使用GSAP创建一个简单的动画:
```javascript
gsap.to("#myElement", { x: 100, duration: 1 });
```
7.Three.js
- 使用Three.js创建一个简单的3D场景:
```javascript
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// ...添加几何体和光源
function animate() {
requestAnimationFrame(animate);
// ...更新场景
renderer.render(scene, camera);
}
animate();
```
8.Pixi.js
- 使用Pixi.js创建一个简单的精灵动画:
```javascript
var app = new PIXI.Application({ width: 256, height: 256 });
document.body.appendChild(app.view);
var sprite = PIXI.Sprite.from('assets/image.png');
app.stage.addChild(sprite);
// ...动画逻辑
```
9. D3.js
- 使用D3.js创建一个简单的柱状图:
```javascript
var data = [4, 8, 15, 16, 23, 42];
d3.select("#chart").selectAll("div")
.data(data)
.enter().append("div")
.style("height", function(d) { return d * 10 + "px"; });
```
10.p5.js
- 使用p5.js创建一个简单的交互式图形:
```javascript
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
ellipse(mouseX, mouseY, 50, 50);
}
```
这些示例展示了如何使用JavaScript及其图形和动画库来创建不同的视觉效果。在实际开发中,这些技术可以结合使用,以创造出丰富多样的图形和动画体验。
存储
JavaScript 提供了多种存储机制,以便在客户端存储数据。以下是一些常用的存储功能及其代码示例:
1. Cookie
- 设置Cookie:
```javascript
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";
```
- 读取Cookie:
```javascript
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
```
2.LocalStorage
- 设置LocalStorage项:
```javascript
localStorage.setItem("username", "John Doe");
```
- 读取LocalStorage项:
```javascript
var username = localStorage.getItem("username");
```
- 删除LocalStorage项:
```javascript
localStorage.removeItem("username");
```
- 清空所有LocalStorage数据:
```javascript
localStorage.clear();
```
3. SessionStorage
- 设置SessionStorage项(仅在会话期间有效):
```javascript
sessionStorage.setItem("isLoggedIn", "true");
```
- 读取SessionStorage项:
```javascript
var isLoggedIn = sessionStorage.getItem("isLoggedIn");
```
- 删除SessionStorage项:
```javascript
sessionStorage.removeItem("isLoggedIn");
```
- 清空所有SessionStorage数据:
```javascript
sessionStorage.clear();
```
4. IndexedDB
- 打开IndexedDB数据库:
```javascript
var request = indexedDB.open("myDatabase", 1);
```
- 创建对象仓库:
```javascript
request.onupgradeneeded = function(event) {
var db = event.target.result;
var objectStore = db.createObjectStore("users", { keyPath: "id" });
};
```
- 添加数据到IndexedDB:
```javascript
request.onsuccess = function(event) {
var db = event.target.result;
var transaction = db.transaction(["users"], "readwrite");
var objectStore = transaction.objectStore("users");
objectStore.add({ id: 1, name: "John Doe" });
};
```
5. WebSQL
- 打开WebSQL数据库:
```javascript
var db = openDatabase("myDatabase", "1.0", "My Database", 2 * 1024 * 1024);
```
- 创建表:
```javascript
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
});
```
- 插入数据:
```javascript
db.transaction(function(tx) {
tx.executeSql("INSERT INTO users (name) VALUES (?)", ["John Doe"]);
});
```
6. Cache API
- 打开缓存:
```javascript
caches.open("my-cache").then(function(cache) {
// 使用缓存
});
```
- 添加资源到缓存:
```javascript
cache.addAll(["/styles.css", "/script.js"]).then(function() {
// 资源已添加到缓存
});
```
- 从缓存中获取资源:
```javascript
cache.match("/styles.css").then(function(response) {
// 处理响应
});
```
这些示例展示了如何在JavaScript中使用不同的存储机制。每种机制都有其适用场景,例如LocalStorage和SessionStorage适用于存储少量数据,而IndexedDB适用于存储大量结构化数据。在实际开发中,应根据应用程序的需求选择合适的存储机制。
多媒体处理
JavaScript 提供了丰富的多媒体处理功能,包括音频和视频的播放、录制和处理。以下是一些常用的多媒体处理功能及其代码示例:
1.HTML5 Audio 和 Video 元素
- 播放音频:
```html
<audio controls>
<source src="path/to/audio.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
```
- 播放视频:
```html
<video width="320" height="240" controls>
<source src="path/to/video.mp4" type="video/mp4">
Your browser does not support the video element.
</video>
```
2.HTML5 录音 API
- 开始录音:
```javascript
function startRecording() {
var context = new (window.AudioContext || window.webkitAudioContext)();
var recorder = context.createMediaRecorder(stream);
recorder.ondataavailable = function(e) {
// 处理录音数据
};
recorder.start();
}
```
3. HTML5 音频和视频播放控制
- 控制播放:
```javascript
var audio = document.querySelector("audio");
audio.addEventListener("play", function() {
console.log("开始播放");
});
audio.addEventListener("pause", function() {
console.log("暂停播放");
});
```
4. HTML5 视频解码器控制
- 控制视频解码器:
```javascript
var video = document.querySelector("video");
video.addEventListener("loadedmetadata", function() {
console.log("视频加载完成");
});
```
5. WebRTC
- 实现视频通话:
```javascript
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => {
var video = document.querySelector("video");
video.srcObject = stream;
})
.catch(error => console.error("获取媒体流失败", error));
```
6. HTML5 音频和视频播放器控件
- 控制播放器控件:
```javascript
var player = document.getElementById("player");
player.addEventListener("ended", function() {
console.log("播放结束");
});
```
7.HTML5 音频和视频播放器控件
- 控制播放器控件:
```javascript
var player = document.getElementById("player");
player.addEventListener("ended", function() {
console.log("播放结束");
});
```
8. HTML5 音频和视频播放器控件
- 控制播放器控件:
```javascript
var player = document.getElementById("player");
player.addEventListener("ended", function() {
console.log("播放结束");
});
```
9.HTML5 音频和视频播放器控件
- 控制播放器控件:
```javascript
var player = document.getElementById("player");
player.addEventListener("ended", function() {
console.log("播放结束");
});
```
10. HTML5 音频和视频播放器控件
- 控制播放器控件:
```javascript
var player = document.getElementById("player");
player.addEventListener("ended", function() {
console.log("播放结束");
});
```
这些示例展示了如何使用JavaScript和HTML5的多媒体处理功能。在实际开发中,这些技术可以结合使用,以创建丰富的多媒体交互体验。
网络通信
JavaScript 提供了多种网络通信功能,包括与服务器进行数据交换、使用WebSocket进行实时通信等。以下是一些常用的网络通信功能及其代码示例:
1. AJAX(XMLHttpRequest)
- 发送GET请求:
```javascript
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
console.log(data);
}
};
xhr.send();
```
2.Fetch API
- 发送GET请求:
```javascript
fetch("https://api.example.com/data")
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('请求失败:', error));
```
3. WebSocket
- 创建WebSocket连接:
```javascript
var ws = new WebSocket("wss://www.example.com/socketserver");
ws.onopen = function(event) {
ws.send("你好,服务器!");
};
ws.onmessage = function(event) {
console.log("服务器说:" + event.data);
};
```
4. Socket.IO
- 使用Socket.IO进行实时通信:
```javascript
var socket = io("http://localhost:3000");
socket.on("message", function(data) {
console.log("服务器说:" + data);
});
```
5. WebRTC
- 实现视频通话:
```javascript
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => {
var video = document.querySelector("video");
video.srcObject = stream;
})
.catch(error => console.error("获取媒体流失败", error));
```
6.JSONP
- 使用JSONP获取数据:
```javascript
function getData(callback) {
var script = document.createElement("script");
script.src = "https://api.example.com/data?callback=?";
document.body.appendChild(script);
}
getData(function(data) {
console.log(data);
});
```
7. XMLHttpRequest Level 2
- 使用XMLHttpRequest Level 2发送请求:
```javascript
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true);
xhr.responseType = "json";
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = xhr.response;
console.log(data);
}
};
xhr.send();
```
8.CORS
- 使用CORS发送请求:
```javascript
fetch("https://api.example.com/data", {
mode: "cors"
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('请求失败:', error));
```
9.FormData
- 使用FormData发送表单数据:
```javascript
var formData = new FormData();
formData.append("username", "John Doe");
fetch("https://api.example.com/data", {
method: "POST",
body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('请求失败:', error));
```
10.FileReader
- 使用FileReader读取文件:
```javascript
设备访问
JavaScript 提供了丰富的设备访问功能,允许开发者获取和使用各种设备功能,如摄像头、麦克风、地理位置等。以下是一些常用的设备访问功能及其代码示例:
1. 摄像头访问
- 使用摄像头进行拍照:
```javascript
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
var video = document.querySelector("video");
video.srcObject = stream;
})
.catch(error => console.error("获取摄像头失败", error));
```
2.麦克风访问
- 使用麦克风进行录音:
```javascript
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
var audioContext = new AudioContext();
var microphone = audioContext.createMediaStreamSource(stream);
var recorder = audioContext.createMediaRecorder(microphone);
recorder.ondataavailable = function(e) {
// 处理录音数据
};
recorder.start();
})
.catch(error => console.error("获取麦克风失败", error));
```
3.地理位置访问
- 获取当前位置:
```javascript
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(function(position) {
console.log("纬度:" + position.coords.latitude);
console.log("经度:" + position.coords.longitude);
});
} else {
console.log("当前浏览器不支持地理位置功能");
}
```
4.设备方向
- 获取设备方向:
```javascript
window.addEventListener("deviceorientation", function(event) {
console.log("方向角:" + event.alpha);
console.log("俯仰角:" + event.beta);
console.log("滚转角:" + event.gamma);
});
```
5. 设备加速度
- 获取设备加速度:
```javascript
window.addEventListener("devicemotion", function(event) {
console.log("加速度X:" + event.acceleration.x);
console.log("加速度Y:" + event.acceleration.y);
console.log("加速度Z:" + event.acceleration.z);
});
```
6.陀螺仪
- 获取陀螺仪数据:
```javascript
window.addEventListener("devicegyroscope", function(event) {
console.log("陀螺仪X:" + event.gamma);
console.log("陀螺仪Y:" + event.beta);
console.log("陀螺仪Z:" + event.alpha);
});
```
7. 触摸事件
- 监听触摸事件:
```javascript
window.addEventListener("touchstart", function(event) {
console.log("触摸开始");
});
window.addEventListener("touchmove", function(event) {
console.log("触摸移动");
});
window.addEventListener("touchend", function(event) {
console.log("触摸结束");
});
```
8. 磁场
- 获取磁场数据:
```javascript
window.addEventListener("deviceorientationabsolute", function(event) {
console.log("磁场X:" + event.magneticHeading);
console.log("磁场Y:" + event.trueHeading);
console.log("磁场Z:" + event.userAccuracy);
});
```
这些示例展示了如何使用JavaScript和HTML5的设备访问功能。在实际开发中,这些技术可以结合使用,以创建丰富的交互体验。
算法和数据处理
JavaScript 提供了多种算法和数据处理功能,用于执行各种计算和操作。以下是一些常用的算法和数据处理功能及其代码示例:
1. 排序算法
- 快速排序:
```javascript
function quickSort(arr) {
if (arr.length <= 1) return arr;
var pivot = arr[Math.floor(arr.length / 2)];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) left.push(arr[i]);
else right.push(arr[i]);
}
return quickSort(left).concat([pivot], quickSort(right));
}
```
2. 查找算法
- 二分查找:
```javascript
function binarySearch(arr, target) {
var left = 0, right = arr.length - 1;
while (left <= right) {
var mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
```
3. 排序算法
- 冒泡排序:
```javascript
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
```
4. 查找算法
- 线性查找:
```javascript
function linearSearch(arr, target) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === target) return i;
}
return -1;
}
```
5. 查找算法
- 斐波那契数列:
```javascript
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
```
6. 查找算法
- 最大公约数:
```javascript
function gcd(a, b) {
if (b === 0) return a;
return gcd(b, a % b);
}
```
7. 查找算法
- 最小公倍数:
```javascript
function lcm(a, b) {
return (a * b) / gcd(a, b);
}
```
8. 查找算法
- 字符串匹配:
```javascript
function strStr(haystack, needle) {
if (!haystack || !needle) return -1;
var i = haystack.indexOf(needle);
return i !== -1 ? i : -1;
}
```
9. 查找算法
- 回溯算法(解决组合问题):
```javascript
function backtrack(combinations, remaining, current) {
if (remaining.length === 0) {
console.log(combinations);
return;
}
for (var i = 0; i < remaining.length; i++) {
current.push(remaining[i]);
backtrack(combinations, remaining.slice(i + 1), current);
current.pop();
}
}
```
10.查找算法
- 递归分治算法(解决划分问题):
```javascript
function recursiveDivide(array, left, right) {
if (right - left <=
第三方API集成
JavaScript 可以通过第三方 API 集成来实现更复杂的功能,如地图服务、社交网络、支付网关等。以下是一些常用的第三方 API 集成功能及其代码示例:
1. Google Maps API
- 显示地图:
```javascript
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
// 在页面加载完毕后调用 initMap 函数
google.maps.event.addDomListener(window, 'load', initMap);
```
2. Facebook API
- 获取用户信息:
```javascript
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'public_profile,email'});
```
3. PayPal API
- 创建支付按钮:
```html
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="business" value="seller@example.com">
<input type="hidden" name="upload" value="1">
<input type="hidden" name="currency_code" value="USD">
<!-- 商品信息 -->
<input type="hidden" name="item_name_1" value="Product Name">
<input type="hidden" name="amount_1" value="9.99">
<!-- 继续添加商品信息 -->
<input type="hidden" name="tax_cart" value="0.00">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="return" value="http://www.example.com/thankyou.html">
<input type="hidden" name="cancel_return" value="http://www.example.com/cancel.html">
<input type="hidden" name="notify_url" value="http://www.example.com/ipn.php">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
< img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
```
4. Twitter API
- 获取推文:
```javascript
$.ajax({
url: "https://api.twitter.com/1.1/statuses/user_timeline.json",
data: {screen_name: "twitterapi", count: 5},
dataType: "jsonp",
success: function(data) {
$.each(data, function(i, tweet) {
$("#tweets").append("<li>" + tweet.text + "</li>");
});
}
});
```
5. Twilio API
- 发送短信:
```javascript
var accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var authToken = 'your_auth_token';
var twilio = require('twilio');
var client = new twilio(accountSid, authToken);
client.messages.create({