视频网站中重磅推荐模块(附加源码)

写在开头

上期代码主要实现省市区三级联动效果,开发久了很多功能都是通过框架组件库来完成,但是如果组件满足不了开发需求,还需要开发人员手动封装组件,专门出这样一期文章,通过原生js实现一些特定功能,功能也比较简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript,在前端中的作用,另外也培养下我们的代码思维,那我们本次就通过由简单到复杂循序渐进,后续专栏中我们会带领大家用前端实现图片放大镜、积分抽奖、拼图、无缝轮播图、图片瀑布流、读心术小游戏等等有趣的小功能,纯前端语言实现,都会陆续带给大家。

功能介绍

实现视频网站中重磅推荐模块,可以参考PC端腾讯视频首页

创建页面

<!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="./demo.css">
</head>
<body><div class="container"><div class="top-nav"></div><div class="img" id="imgs"><a href="#"></a></div><div class="side-bar" id="side-bar"><a href="#" class="guess"> <img src="../img/all.png"> 猜你会追</a><a href="#" class="recom"> <img src="../img/tj.png"> 重磅推荐</a></div></div>
</body>
</html>

样式实现

* {margin: 0;padding: 0;list-style: none;text-decoration: none;}.content {height: 500px;width: 100%;position: relative;}.top-nav {position: absolute;z-index: 2;height: 70px;width: 100%;left: 0;top: 0;/* background: #fac; */background-color: rgba(255, 255, 255, .4);}.imgs {width: 100%;height: 100%;position: relative;}.imgs > a {display: none;width: 100%;height: 100%;/* background-image: url(https://puui.qpic.cn/media_img/lena/PICgthm4a_580_1680/0); */background-repeat: no-repeat;background-position: center 0;/* background-color: rgb(25,117,180); */}.imgs > .active {display: block;}.side-bar {height: 430px;width: 350px;position: absolute;top: 70px;right: 0;/* background: black; */background: rgba(15, 15, 30, 0.4);}.side-bar > a {display: block;height: 35px;line-height: 35px;margin-left: 45px;color: rgba(255, 255, 255, 0.7);}.cnhz {font-size: 22px;margin-top: 10px;margin-bottom: 20px;font-weight: 700;}.cnhz::after {position: absolute;top: 55px;height: 1px;left: 10px;right: 10px;content: '';background: rgba(255,255,255, 0.1);}.zbtj {font-size: 22px;margin-top: 10px;font-weight: 700;}.cnhz > img, .zbtj > img {margin-left: -24px;}.nav {font-size: 0;}.nav span {font-size: 16px;}.side-bar .active {font-size: 16px;color: #ff5c38;width: 300px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;} .active > span {font-size: 22px;font-weight: 700;}

逻辑功能

// 选择图片容器
var imgs = document.getElementById('imgs');
// 选择侧边导航栏容器
var sideBar = document.getElementById('side-bar');// 存储我们创建的图片元素(a)
var imgsDom = [];
// 存储我们创建的导航元素(a)
var navDom = [];// 记录当前活跃的图片和导航(active);
var activeImg = null;
var activeNav = null;// 根据data数组,生成对应的图片以及侧边栏for(var i=0; i<data.length; i++) {// i 数组中的索引// item代表数组中的一个对象var item = data[i];// 创建图片(a)var tagA = document.createElement('a');tagA.setAttribute('href', '#');tagA.style.backgroundColor = item.bg;tagA.style.backgroundImage = 'url('+ item.img +')';imgs.appendChild(tagA);imgsDom.push(tagA);// 创建导航(a)var tagNav = document.createElement('a');tagNav.setAttribute('class', 'nav');tagNav.setAttribute('href', '#');tagNav.setAttribute('title',item.title + ':' + item.desc);tagNav.innerHTML = '<span>'+ item.title +'</span> ' + item.desc;sideBar.appendChild(tagNav); navDom.push(tagNav);// 第一个元素让它展示(图片展示,标题展示)if (i == 0) {tagA.setAttribute('class', 'active');tagNav.setAttribute('class', 'active');activeImg = tagA;activeNav = tagNav;}tagNav.onmouseenter = (function (tagA, tagNav) {return function () {// 鼠标移入清除定时器。clearInterval(t);// 1. 把原来活跃的图片和导航取消activeNav.setAttribute('class', 'nav');activeImg.setAttribute('class', '');// 2. 把当前被鼠标选中的导航和图片展示tagA.setAttribute('class', 'active');tagNav.setAttribute('class', 'active');// 3. 记录最新的导航和图片activeImg = tagA;activeNav = tagNav;}})(tagA, tagNav);tagNav.onmouseleave = function() {t = setInterval(move, 3000);}
}// 自己动
function move() {// 1. 把原来活跃的图片和导航取消activeNav.setAttribute('class', 'nav');activeImg.setAttribute('class', '');// 找到当前元素的下一个// 当前图片在页面中的位置var index = imgsDom.indexOf(activeImg);console.log(index);// 如果是最后一个图片,下一个就是第一个图片if  (index == data.length - 1) {activeNav = navDom[0];activeImg = imgsDom[0];} else {activeImg = imgsDom[index + 1];activeNav = navDom[index + 1];}// 活跃的图片和导航,激活(具有active类名)activeImg.setAttribute('class', 'active');activeNav.setAttribute('class', 'active');
}
var t = setInterval(move, 3000);

结尾

首先初始化的逻辑整理明白

  • 页面中需要操作哪些dom
  • 根据mock的data数据,展示对应的图片信息
  • 让页面动起来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Autosar CP RTE:一个例子简要介绍工作原理

以下是一个示例&#xff0c;展示如何通过AUTOSAR的RTE机制利用配置&#xff08;ARXML文件&#xff09;来实现软件组件集成&#xff0c;包含对应的C源代码以及模拟自动生成的RTE框架代码的示例。请注意&#xff0c;实际的AUTOSAR项目会复杂得多&#xff0c;这里只是一个简化且示…

HttpUtil的get和post请求

Http工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.ht…

《C++:计算机视觉图像识别与目标检测算法优化的利器》

在当今科技飞速发展的时代&#xff0c;计算机视觉领域正经历着前所未有的变革与突破。图像识别和目标检测作为其中的核心技术&#xff0c;广泛应用于安防监控、自动驾驶、智能医疗等众多领域&#xff0c;其重要性不言而喻。而 C语言&#xff0c;凭借其卓越的性能、高效的资源控…

NocoBase搭建(下):安装NocoBase

系统和Docker安装好后&#xff0c;开始安装NocoBase。一.创建文件夹NocoBase rootNocobase:/mkdir NocoBase && cd NocoBase二.创建 docker-compose.yml rootNocobase:/vi docker-compose.yml version: "3" networks: nocobase: driver: bridge serv…

实践项目3:温度采集系统

一、功能说明 基于AVR单片机设计一温度采集系统。该系统由一个主机和一个从机构成&#xff0c;能够实时检测并显示现场温度&#xff0c;当温度超过预置温度时&#xff0c;进行声光报警。 二、具体要求 1、主机与从机之间采用串口通信&#xff1b; 2、从机采集温度并通过串口…

React简单入门 - [Next.js项目] - 页面跳转、AntD组件、二级目录等

须知 1Next.js 官网(英文)https://nextjs.org/2Next.js 文档(中文)https://nextjscn.org/docs/3Ant Design组件总览https://ant-design.antgroup.com/components/overview-cn4tailwindcss类名大全 官网https://www.tailwindcss.cn/docs/justify-content 5tailwindcss常用类…

Java中的“泛型“

泛型&#xff08;Generics&#xff09;是Java中的一种重要特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff08;type parameters&#xff09;。泛型的主要目的是提高代码的类型安全性和重用性。下面我将详细讲解Java中的泛型。 1. 泛型的基本概念 泛型允许我…

Python知识分享第25天-快速排序算法

快速排序算法 快速排序&#xff08;QuickSort&#xff09;是一种基于分治法的高效排序算法。它通过选择一个“基准”元素&#xff0c;将数组分成两个子数组&#xff0c;其中一个子数组的所有元素都比基准小&#xff0c;另一个子数组的所有元素都比基准大&#xff0c;然后递归地…

PyTorch练习——张量的四则运算与矩阵运算

练习1&#xff1a; # 导入Torch库 import torch# 创建两个张量 x torch.tensor([1, 2, 3]) y torch.tensor([4, 5, 6])# 执行加法操作 z torch.add(x, y) print("加法结果&#xff1a;", z)# 执行减法操作 z torch.subtract(x, y) print("减法结果&#xf…

String【Redis对象篇】

&#x1f3c6; 作者简介&#xff1a;席万里 ⚡ 个人网站&#xff1a;https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜&#xff0c;同时略懂Vue与React前端技术&#xff0c;也了解一点微信小程序开发。 &#x1f37b; 对计算机充满兴趣&#xff0c;愿意并且希望学习更多的技…

C# 上位机项目开发实例全解析

一、项目规划与需求分析 功能确定 数据监控&#xff1a; 明确需采集和展示的设备数据种类&#xff0c;如温度、压力数值。规划数据的实时更新频率&#xff0c;保证监控的时效性。控制操作&#xff1a; 列出上位机对下位机的控制功能&#xff0c;如设备的启动与停止。设计控制指…

我们来学mysql -- MSI安装(安装篇)

主题 书接上文&#xff0c;在《探讨win安装方式》中官方推荐MSI要是把大厂的标准奉为圭臬&#xff0c;说啥认啥&#xff0c;他一翻脸&#xff0c;小丑不就是咱了再说了&#xff0c;都干到家门口了8.4版本官方文档&#xff0c;还不给他梭罗下 MSI 点击**.msi弹出MySQL Install…

2024年12月六级写作复习资料

1 如何看待”社交搭子“的现象 1.1 范文 In the rapid pace of modern life, emerging as a novel social model, “da zi socializing” is gaining increasing popularity among young people. It breaks free from the constraints of traditional social interactions, c…

【IC面试问题:UCIE PHY LSM AXI Cache】

IC面试问题&#xff1a;UCIE PHY LSM && AXI && Cache 1 UCIE PHY LSM有几种状态&#xff1f; 以及L1和L2这两种低功耗状态有什么区别&#xff1f;2 AXI的特性&#xff1f; 通道之间有依赖关系吗&#xff1f; master和slave的valid和ready关系&#xff1f; 写数…

C++ 中多态性在实际项目中的应用场景

背景与需求 在一个图形绘制软件中&#xff0c;需要绘制多种不同的图形&#xff0c;如圆形、矩形、三角形等。每个图形都有自己的绘制方法&#xff0c;但是它们都可以被看作是一个抽象的 “图形” 概念&#xff0c;并且都有一个共同的操作&#xff0c;比如绘制&#xff08;draw&…

html|本地实现浏览器m3u8播放器,告别网络视频卡顿

前言 网络上经常是以m3u8文件传输视频流的 &#xff0c;但是有时网络慢往往导致视频播放卡顿。于是我在想能不能先下载然后再播放呢&#xff1f;于是尝试下载然后实现本地播放m3u8视频。 正文 1.找到网络视频流的m3u8连接 一般在浏览器按F12就可以看到有请求视频流的连接。 …

交互开发---测量工具(适用VTK或OpenGL开发的应用程序)

简介&#xff1a; 经常使用RadiAnt DICOM Viewer来查看DICOM数据&#xff0c;该软件中的测量工具比较好用&#xff0c;就想着仿照其交互方式自己实现下。后采用VTK开发应用程序时&#xff0c;经常需要开发各种各样的测量工具&#xff0c;如果沿用VTK的widgets的思路&#xff0c…

VirtIO实现原理之数据结构与数据传输演示(4)

接前一篇文章:VirtIO实现原理之数据结构与数据传输演示(3) 本文内容参考: VirtIO实现原理——vring数据结构-CSDN博客 VirtIO实现原理——数据传输演示-CSDN博客 特此致谢! 一、数据结构总览 2. 相关数据结构 前文书介绍了《Virtual I/O Device (VIRTIO) Version 1.3…

【蓝桥杯每日一题】技能升级

技能升级 2024-12-10 蓝桥杯每日一题 技能升级 二分 题目大意 一个角色有 N 种可以增加攻击力的技能&#xff0c;对于第 i 个技能首次升级可以提升 A i A_i Ai​ 点攻击力&#xff0c;随后的每次升级增加的攻击力都会减少 B i B_i Bi​ 。升级 ⌈ A i B i ⌉ \lceil \frac{A…

uniapp -- 实现页面滚动触底加载数据

效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</