【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析
这个是实现的效果,基本上轮播效果和主流网站的一致,但是我也在上面优化了一些效果,
可以在线预览效果:https://vip.52tech.tech/
目前项目代码已经全部开源:项目地址:https://github.com/xiugangzhang/vip.github.io
下面就来介绍一些实现思路吧:
//首页轮播图效果开始------------------------------------------------------------------------------------------
/**
* 使用面向对象的方式封装这个轮播图效果
*/
function imgShow() {
}
/**
* 首页的电影效果轮播图效果实现
* @type {{imgs: Array, num: number, currentNumber: number, elements: null, start: imgShow.start, init: imgShow.init, initParas: imgShow.initParas, initEvent: imgShow.initEvent, itemMove: imgShow.itemMove, mouseover: imgShow.mouseover, click: imgShow.click, autoPlay: imgShow.autoPlay}}
*/
imgShow.prototype = {
imgs : [], // 图片数组
num : -1, // 初始的图片下标
currentNumber : 0, // 当前展示的图片下表编号
elements : null, // 存储获取的DOM元素
/**
* 输入图片路径信息之后, 开启轮播图效果
* @param imgs
*/
start : function (imgs) {
this.init(imgs);
},
/**
* 输入参数初始化
* 事件处理模块初始化
* @param imgs
*/
init : function (imgs) {
// 初始化输入参数
this.initParas(imgs);
// 主程序入口
this.autoPlay();
// 事件初始化
this.initEvent();
},
/**
* 输入参数初始化
* @param imgs
*/
initParas : function (imgs) {
this.imgs = imgs;
this.elements = $('.main-slider ul li');
},
/**
* 事件处理初始化
*/
initEvent : function () {
this.mouseover();
this.click();
},
/**
* 自动移动项的实现(图片随项一起移动)
* @param index
*/
itemMove : function (index) {
// 移动之后,找到相应的li-item,改变他的样式
var lis = $('.main-slider ul li');
lis.each(function () {
var a = this.childNodes[0];
if (this.className === 'current') {
this.className = '';
a.childNodes[0].className = '';
a.childNodes[1].className = '';
}
});
// 把当前的设置为样式 index = 0, 则切换为第0个li标签
var current = lis[index+1];
current.className = 'current';
current.childNodes[0].childNodes[0].className = 'current-title';
current.childNodes[0].childNodes[1].className = 'current-content';
},
/**
* 鼠标移动事件处理模块
*/
mouseover : function () {
// 获取所有的li标签
var lis = this.elements;
var self = this;
lis.on('mouseover', function () {
if (this.className === 'first' || this.className === 'last'){
return;
}
lis.each(function () {
var a = this.childNodes[0];
if (this.className === 'current') {
this.className = '';
a.childNodes[0].className = '';
a.childNodes[1].className = '';
}
});
// 把当前的设置为样式
var current = this.childNodes[0];
this.className = 'current';
current.childNodes[0].className = 'current-title';
current.childNodes[1].className = 'current-content';
// 原始的实现可以通过父节点的所有孩子节点变遍历的方式来判断,srcNode.parentNode.childNodes[index] === srcNode
// console.log($(this).index())
// 设置完毕之后, 修改与之相对应的图片样式信息
$('.main-slider').css('background', 'url(' + self.imgs[$(this).index()-1] + ')').css('background-size', '100%');
});
},
/**
* 鼠标单击事件处理模块
*/
click : function () {
var self = this;
$('.arrow-l').on('click', function () {
self.currentNumber--;
if (self.currentNumber<0){
self.currentNumber = self.imgs.length-1;
}
$('.main-slider').css('background', 'url(' + self.imgs[self.currentNumber] + ')').css('background-size', '100%');
// 设置为自动移动标签项
self.itemMove(self.currentNumber);
self.num = self.currentNumber;
});
$('.arrow-r').on('click', function () {
self.currentNumber++;
if (self.currentNumber > self.imgs.length-1){
self.currentNumber = 0;
}
$('.main-slider').css('background', 'url(' + self.imgs[self.currentNumber] + ')').css('background-size', '100%');
// 设置为自动移动
self.itemMove(self.currentNumber);
self.num = self.currentNumber;
});
},
/***
* 轮播图自动播放的实现
*/
autoPlay : function () {
var self = this;
setInterval(function () {
self.num++;
$('.main-slider').css('background', 'url(' + self.imgs[self.num % 8] + ')').css('background-size', '100%');
self.currentNumber = self.num % 8;
// 开始移动item项
self.itemMove(self.currentNumber);
}, 4000);
},
}
/**
* 轮播图效果的启动
* @param ev
*/
window.onload = function () {
// 图片数组初始化
var imgs = [
'/www/images/big0.jpg',
'/www/images/big1.jpg',
'/www/images/big2.jpg',
'/www/images/big3.jpg',
'/www/images/big4.jpg',
'/www/images/big5.jpg',
'/www/images/big6.jpg',
'/www/images/big7.jpg',
];
// 初始化参数,启动轮播图效果
var run = new imgShow(imgs);
run.start(imgs);
}
//首页轮播图效果结束------------------------------------------------------------------------------------------
js所有的实现代码就在上面了,基本上每行代码都做了相应的注释,有什么的不明白的地方也可以直接在下面提出来。如果需要完整代码的,可以直接在线预览或者Github上面下载。
项目地址:https://github.com/xiugangzhang/vip.github.io
在线预览地址:https://xiugangzhang.github.io/vip.github.io/index.html
【VIP视频网站项目二】搭建爱奇艺优酷腾讯视频官网首页轮播图效果及实现原理分析的更多相关文章
- 破解爱奇艺优酷等Vip视频
现在网络上兴起卖低价Vip会员的,博主在这里介绍一个破解软件,不需要登录,找到视频播放页就可以观看! 软件下载地址:http://zyzpp.cn/ 1.下载软件安装后打开: 2.比如我们要看爱奇艺的 ...
- 跳过爱奇艺优酷vip
1.google chrome浏览器 2.下载插件安装 Tampermonkey https://pan.baidu.com/s/1qvRQD2UO6gPHogjtSUBwUw 将 ...
- 【JavaScript】案例二:使用JS完成首页轮播图效果——事件(onclick&onload)
1.切换图片例子: 事件(onclick) <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)
导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...
- 商城05——首页轮播图显示实现&Redis环境搭建&Redis实现缓存
1. 课程计划 1.首页轮播图的展示 2.首页大广告展示流程图 3.Redis的常用命令 4.Redis的服务器搭建 (集群的搭建) 5.向业务逻辑中添加缓存 6.Jedis的使用(redis的客 ...
- web手工项目02-注册功能输入分析,处理,输出方法-测试用例及缺陷编写-首页轮播图和购物车
web手工项目第二天笔记 昨日回顾 搭建测试环境(WAMP,phpStudy,tpshop项目文件) 熟悉项目(四个步骤,三个来源) 项目测试流程(需求评审,测试计划与方案,测试用例设计与评审,测试执 ...
- 关于只能上QQ而其他电脑软件(IE/优酷/腾讯视频...)不能联网的解决
1.应该是Winsock协议配置有问题,所以进行一下重置工作. 开始-cmd-输入netsh winsock reset命令来重置Winsock目录重新初始化网络环境来恢复网络畅通-重启电脑才能生效 ...
- 【VIP视频网站项目一】搭建视频网站的前台页面(导航栏+轮播图+电影列表+底部友情链接)
首先来直接看一下最终的效果吧: 项目地址:https://github.com/xiugangzhang/vip.github.io 在线预览地址:https://xiugangzhang.githu ...
- 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频
视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频 2018-07-11 | 标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...
随机推荐
- Clojure:解决selmer模板不刷新的问题
当在REPL环境中尝试调试template的时候,会发现每次都需要重启REPL才能看到最新的变化.调查后发现,原来是每次启动REPL的时候,原来的template文件都被放到了target目录中,这样 ...
- spring 计时器
spring 计时器 可以这样: http://blog.csdn.net/u010648555/article/details/52162840 也可以使用annotation <!-- 设置 ...
- 动手分析安卓仿QQ联系人列表TreeView控件
因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码. 一. 需要用 ...
- iOS手势识别
一.手势识别与触摸事件 1.如果想监听一个view上面的触摸事件,可选的做法是: (1)自定义一个view (2)实现view的touches方法,在方法内部实现具体处理代码 2.通过touches方 ...
- JDK5.0新特性(静态导入、自动装箱/拆箱、增强for循环、可变参数、枚举、泛形)
JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效.清晰,安全的代码. 这些新特性主要有:1.静态导入2.自动装箱/拆箱3.增强for循环4.可变参数5.枚举6.泛型7 ...
- PCB Genesis原点坐标转换关系
一.Genesis原点坐标转换关系: 1.读取Genesis坐标转换: UI界面坐标 = 文件坐标 - 偏移值 2.写入Genesis坐标转换: 文件坐标 = UI界面坐标 + 偏移值 3.为 ...
- E20170905-mk
recursive adj. 回归的,递归的;
- 昂贵的聘礼(Dijkstra)
http://poj.org/problem?id=1062 每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点 ...
- bzoj1588: [HNOI2002]营业额统计(权值线段树)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 16863 Solved: 6789[Submit][Sta ...
- DOM 介绍
什么时DOM DOM:文档对象模型.DOM为文档提供了结构化表示,并定义了如何通过脚本来范文文档结构.目的起始就是为了能让js操作html元素而指定的一个规范. DOM就是由节点组成的. 解析过程 H ...