当前位置:首页 > JavaScript

js实现仿豆瓣网页

2026-03-01 18:41:52JavaScript

以下是使用JavaScript实现仿豆瓣网页的关键步骤和代码示例:

页面结构设计

HTML部分需要包含导航栏、内容展示区和页脚。导航栏使用<nav>标签,内容区用<div>划分模块,页脚用<footer>

<nav class="navbar">
  <div class="logo">豆瓣</div>
  <ul class="nav-links">
    <li><a href="#">电影</a></li>
    <li><a href="#">图书</a></li>
    <li><a href="#">音乐</a></li>
  </ul>
</nav>

<div class="content">
  <div class="movie-list" id="movieContainer"></div>
</div>

<footer class="footer">
  <p>© 2023 仿豆瓣网页</p>
</footer>

数据获取与渲染

使用Fetch API获取电影数据并动态渲染到页面:

const fetchMovies = async () => {
  try {
    const response = await fetch('https://api.example.com/movies');
    const data = await response.json();

    const movieContainer = document.getElementById('movieContainer');
    data.forEach(movie => {
      const movieCard = document.createElement('div');
      movieCard.className = 'movie-card';
      movieCard.innerHTML = `
        <img src="${movie.image}" alt="${movie.title}">
        <h3>${movie.title}</h3>
        <p>评分: ${movie.rating}</p>
      `;
      movieContainer.appendChild(movieCard);
    });
  } catch (error) {
    console.error('获取数据失败:', error);
  }
};

window.addEventListener('DOMContentLoaded', fetchMovies);

样式实现

CSS部分实现豆瓣风格的布局和视觉效果:

.navbar {
  display: flex;
  justify-content: space-between;
  padding: 15px;
  background-color: #f7f7f7;
}

.movie-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 20px;
  padding: 20px;
}

.movie-card {
  border: 1px solid #ddd;
  padding: 10px;
  border-radius: 4px;
}

.movie-card img {
  width: 100%;
  height: auto;
}

交互功能实现

为电影卡片添加悬停效果和点击事件:

document.querySelectorAll('.movie-card').forEach(card => {
  card.addEventListener('mouseenter', () => {
    card.style.transform = 'scale(1.05)';
    card.style.boxShadow = '0 4px 8px rgba(0,0,0,0.1)';
  });

  card.addEventListener('mouseleave', () => {
    card.style.transform = 'scale(1)';
    card.style.boxShadow = 'none';
  });

  card.addEventListener('click', () => {
    const title = card.querySelector('h3').textContent;
    alert(`你点击了: ${title}`);
  });
});

响应式设计

通过媒体查询实现移动端适配:

@media (max-width: 768px) {
  .navbar {
    flex-direction: column;
  }

  .movie-list {
    grid-template-columns: repeat(2, 1fr);
  }
}

本地存储功能

使用localStorage存储用户偏好:

js实现仿豆瓣网页

// 存储主题偏好
const setTheme = (theme) => {
  localStorage.setItem('theme', theme);
  document.body.className = theme;
};

// 初始化时读取
const savedTheme = localStorage.getItem('theme') || 'light';
document.body.className = savedTheme;

以上代码组合可以实现一个基本的仿豆瓣网页,包含数据获取、动态渲染、交互效果和响应式设计等核心功能。实际开发中需要根据具体需求调整API接口和样式细节。

标签: 豆瓣网页
分享给朋友:

相关文章

vue实现网页水印

vue实现网页水印

添加静态水印 在Vue中可以通过CSS或Canvas实现静态水印。CSS方法适合简单文字水印,Canvas适合复杂水印效果。 <template> <div class="wa…

h5实现网页跳转

h5实现网页跳转

H5实现网页跳转的方法 在HTML5中,可以通过多种方式实现网页跳转。以下是几种常见的方法: 使用<a>标签 通过超链接标签实现跳转是最传统的方式: <a href="http…

vue实现网页导出excel

vue实现网页导出excel

Vue 实现网页导出 Excel 在 Vue 项目中,可以通过以下方法实现将数据导出为 Excel 文件。常用的库包括 xlsx 和 file-saver。 安装依赖 确保项目中已安装 xlsx 和…

使用vue实现简易网页

使用vue实现简易网页

使用 Vue 实现简易网页 创建 Vue 项目 使用 Vue CLI 快速初始化项目,确保已安装 Node.js 和 npm。 运行以下命令创建项目: npm install -g @vue/c…

react实现网页加载动画

react实现网页加载动画

使用 CSS 动画实现加载动画 在 React 中可以通过 CSS 动画实现简单的加载效果。创建一个独立的 CSS 文件定义动画关键帧,然后在组件中应用。 CSS 动画示例: @keyframes…

网页css制作

网页css制作

CSS 基础语法 CSS(层叠样式表)用于控制网页的样式和布局。基本语法由选择器和声明块组成: 选择器 { 属性: 值; 属性: 值; } 例如,设置段落文字颜色和字体大小:…