JavaScript 网页设计案例

以下是几个实用的JavaScript网页设计案例,涵盖不同功能和复杂度:

1. 交互式图片画廊

javascript

// 简单的图片画廊
const gallery = document.querySelector(‘.gallery’);
const images = gallery.querySelectorAll(‘img’);
const modal = document.getElementById(‘modal’);
const modalImg = document.getElementById(‘modal-img’);
const closeBtn = document.querySelector(‘.close’);

images.forEach(img => {
img.addEventListener(‘click’, () => {
modal.style.display = ‘block’;
modalImg.src = img.src;
});
});

closeBtn.addEventListener(‘click’, () => {
modal.style.display = ‘none’;
});

window.addEventListener(‘click’, (e) => {
if (e.target === modal) {
modal.style.display = ‘none’;
}
});

2. 动态表单验证

javascript

// 表单实时验证
const form = document.getElementById(‘signup-form’);
const email = document.getElementById(‘email’);
const password = document.getElementById(‘password’);
const confirmPassword = document.getElementById(‘confirm-password’);

form.addEventListener(‘submit’, (e) => {
e.preventDefault();
if (validateForm()) {
alert(‘表单提交成功!’);
form.reset();
}
});

function validateForm() {
let isValid = true;

// 验证邮箱
if (!email.value.includes(‘@’)) {
showError(email, ‘请输入有效的邮箱地址’);
isValid = false;
} else {
showSuccess(email);
}

// 验证密码长度
if (password.value.length < 6) {
showError(password, ‘密码至少需要6个字符’);
isValid = false;
} else {
showSuccess(password);
}

// 验证密码匹配
if (password.value !== confirmPassword.value) {
showError(confirmPassword, ‘密码不匹配’);
isValid = false;
} else {
showSuccess(confirmPassword);
}

return isValid;
}

function showError(input, message) {
const formControl = input.parentElement;
formControl.className = ‘form-control error’;
const small = formControl.querySelector(‘small’);
small.innerText = message;
}

function showSuccess(input) {
const formControl = input.parentElement;
formControl.className = ‘form-control success’;
}

3. 实时搜索过滤

javascript

// 实时搜索过滤列表
const searchInput = document.getElementById(‘search’);
const items = document.querySelectorAll(‘.item’);

searchInput.addEventListener(‘input’, () => {
const searchTerm = searchInput.value.toLowerCase();

items.forEach(item => {
const text = item.textContent.toLowerCase();
if (text.includes(searchTerm)) {
item.style.display = ‘block’;
} else {
item.style.display = ‘none’;
}
});
});

4. 拖放功能实现

javascript

// 拖放功能
const draggables = document.querySelectorAll(‘.draggable’);
const containers = document.querySelectorAll(‘.container’);

draggables.forEach(draggable => {
draggable.addEventListener(‘dragstart’, () => {
draggable.classList.add(‘dragging’);
});

draggable.addEventListener(‘dragend’, () => {
draggable.classList.remove(‘dragging’);
});
});

containers.forEach(container => {
container.addEventListener(‘dragover’, e => {
e.preventDefault();
const afterElement = getDragAfterElement(container, e.clientY);
const draggable = document.querySelector(‘.dragging’);

if (afterElement == null) {
  container.appendChild(draggable);
} else {
  container.insertBefore(draggable, afterElement);
}

});
});

function getDragAfterElement(container, y) {
const draggableElements = […container.querySelectorAll(‘.draggable:not(.dragging)’)];

return draggableElements.reduce((closest, child) => {
const box = child.getBoundingClientRect();
const offset = y - box.top - box.height / 2;

if (offset < 0 && offset > closest.offset) {
  return { offset: offset, element: child };
} else {
  return closest;
}

}, { offset: Number.NEGATIVE_INFINITY }).element;
}

5. 无限滚动加载

javascript

// 无限滚动加载内容
const container = document.getElementById(‘content-container’);
let page = 1;
const perPage = 10;
let isLoading = false;

window.addEventListener(‘scroll’, () => {
const { scrollTop, scrollHeight, clientHeight } = document.documentElement;

if (scrollTop + clientHeight >= scrollHeight - 5 && !isLoading) {
loadMoreItems();
}
});

async function loadMoreItems() {
isLoading = true;
document.getElementById(‘loading’).style.display = ‘block’;

try {
// 模拟API请求
const newItems = await fetchItems(page, perPage);

newItems.forEach(item => {
  const itemElement = document.createElement('div');
  itemElement.className = 'item';
  itemElement.textContent = item;
  container.appendChild(itemElement);
});

page++;

} catch (error) {
console.error(‘加载失败:’, error);
} finally {
isLoading = false;
document.getElementById(‘loading’).style.display = ‘none’;
}
}

// 模拟API函数
function fetchItems(page, perPage) {
return new Promise(resolve => {
setTimeout(() => {
const items = [];
const start = (page - 1) * perPage + 1;
const end = start + perPage;

  for (let i = start; i < end; i++) {
    items.push(`项目 ${i}`);
  }
  
  resolve(items);
}, 1000);

});
}

6. 暗黑/明亮模式切换

javascript

// 主题切换功能
const themeToggle = document.getElementById(‘theme-toggle’);
const prefersDarkScheme = window.matchMedia(‘(prefers-color-scheme: dark)’);

// 检查本地存储或系统偏好
const currentTheme = localStorage.getItem(‘theme’) ||
(prefersDarkScheme.matches ? ‘dark’ : ‘light’);
document.body.classList.toggle(‘dark-theme’, currentTheme === ‘dark’);

themeToggle.addEventListener(‘click’, () => {
const isDark = document.body.classList.toggle(‘dark-theme’);
localStorage.setItem(‘theme’, isDark ? ‘dark’ : ‘light’);

// 更新按钮图标
themeToggle.innerHTML = isDark ?
’ :
’;
});
这些案例展示了JavaScript在网页设计中的常见应用,包括交互元素、表单处理、动态内容加载和UI主题切换等。你可以根据项目需求调整这些代码,或者将它们组合起来创建更复杂的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值