整合常用功能的JS小组件库-v1.0
function Alex() {
//给予video.js的页面滚动到视频元素范围内自动播放/出范围暂停播放-----01
this.video_autoplay = function (box) {
var video_box = box.getElementsByTagName('video')[0];
//能否自动播放
var canAuto = true;
//元素距离顶部高度//上滚此距离元素完全出现
var top = box.offsetTop;
//元素高度
var height = parseFloat((window.getComputedStyle ? window.getComputedStyle(box, null) : null || box.currentStyle).height);
//网页可见区域高度
var _height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
//下滚此距离元素完全出现
var min_scroll_height = top - _height + height;
//下滚超过此距离元素完全消失
var max_scroll_height = top + height;
//上滚此距离元素完全出现
var up_max_height = max_scroll_height - height;
//上滚此距离元素完全消失
var up_min_height = top - _height;
//人为点击之后不再自动播放
box.addEventListener('click', function () {
canAuto = false;
});
//判断是上滚还是下滚
var scroll = function (fn) {
var beforeScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
fn = fn || function () {
};
window.addEventListener("scroll", function () {
var afterScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
delta = afterScrollTop - beforeScrollTop;
if (delta === 0) return false;
fn(delta > 0 ? "down" : "up");
beforeScrollTop = afterScrollTop;
}, false);
}
var video_scroll = function () {
//可以自动播放
scroll(function (direction) {
var _top = document.documentElement.scrollTop || document.body.scrollTop;
if ((direction == 'down') && (_top > min_scroll_height) && canAuto) {
video_box.play();
}
if ((direction == 'down') && (_top > max_scroll_height)) {
video_box.pause();
}
if ((direction == 'up') && (_top < up_max_height) && canAuto) {
video_box.play();
}
if ((direction == 'up') && (_top < up_min_height)) {
video_box.pause();
}
});
}
video_scroll();
};
//元素滚动到一定距离后固定在页面顶部------------------------------02
this.menu_fixed = function (menu_container) {
var _top = menu_container.offsetTop;
var scroll_div = function () {
var top = document.documentElement.scrollTop || document.body.scrollTop;
if (top > _top) {
menu_container.style.position = 'fixed';
menu_container.style.top = '0';
} else if (top < _top) {
menu_container.style.position = 'relative';
menu_container.style.top = '0';
}
}
scroll_div();
}
}
var alex = new Alex();
调用方法
var box = document.querySelector('.index_video');
alex.video_autoplay(box);
整合常用功能的JS小组件库-v1.0的更多相关文章
- struct2json -- C结构体与 JSON 快速互转库V1.0发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhutianlong/article/d ...
- 通知:逆天异常库 V1.0版本支持下载了~~
百度网盘:http://pan.baidu.com/s/1bongheJ GitHub:https://github.com/dunitian/LoTDotNet
- 从零开发一款自己的小程序UI组件库(一)
写在前面:有开发过小程序的朋友肯定知道组件化开发的特性,高内聚与低耦合.使用已有的UI组件库,诸如:vantUI-weapp.minUI-weapp等UI组件库的诞生使我们的开发速度大大的加快,丰富的 ...
- 从零开发一款自己的小程序UI组件库(二)
写在前面:从零开发一款自己的小程序UI组件库(一) 上节我们讲到初始化组件库模板.模板文件概述.模板上传npm以及npm包文件下载至本地并运用到项目.这节我们继续,内容主要有基础UI组件库的搭建(bu ...
- vue 和 react 常用包(插件、组件 或 工具)
vue 和 react 都可以使用的包(只是 纯 js 功能的包) 1.qs : https://blog.csdn.net/sansan_7957/article/details/82227040 ...
- 使用自定义验证组件库扩展 Windows 窗体
使用自定义验证组件库扩展 Windows 窗体 1(共 1)对本文的评价是有帮助 - 评价此主题 发布日期 : 8/24/20 ...
- 如何快速为团队打造自己的组件库(上)—— Element 源码架构
文章已收录到 github,欢迎 Watch 和 Star. 简介 详细讲解了 ElementUI 的源码架构,为下一步基于 ElementUI 打造团队自己的组件库打好坚实的基础. 如何快速为团队打 ...
- 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...
- [js开源组件开发]localStorage-cache本地存储的缓存管理
localStorage-cache本地存储的缓存管理 距离上次的组件开发有近三个月的时间了,最近一直在做一些杂事,无法静下心来写写代码,也是在学习emberjs,在emberjs中有一个很重要的东西 ...
随机推荐
- netty之粘包分包的处理
1.netty在进行字节数组传输的时候,会出现粘包和分包的情况.当个数据还好,如果数据量很大.并且不间断的发送给服务器,这个时候就会出现粘包和分包的情况. 2.简单来说:channelBuffer在接 ...
- spring-boot、spring-data-jpa、hibernate整合
一.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...
- STM32堆栈指针疑问
1. 下面的代码看的不是很明白,百为stm32开发板光盘\测试程序\CortexM3\Mode_Privilege\project,堆是程序员分配和使用的,栈是编译器指定的,存放函数参数,临时变量. ...
- 转:asp.net mvc ef 性能监控调试工具 MiniProfiler
MiniProfiler官网:http://miniprofiler.com/ MiniProfiler的一个特别有用的功能是它与数据库框架的集成.除了.NET原生的 DbConnection类,Mi ...
- 【JUC源码解析】AQS
简介 AQS,也即AbstractQueuedSynchronizer,抽象队列同步器,提供了一个框架,可以依赖它实现阻塞锁和相关同步器.有两种类型,独占式(Exclusive)和共享式(Share) ...
- javaweb(五)——Servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- Python对象引用问题总结
对于对象引用问题,一直是一知半解的状态,现整理以备使用. 操作不可变对象进行加减运算时,会在内存中创建新的不可变实例,不会影响原来的引用>>> c=12>>> d= ...
- Qt 5 最新信号和槽连接方式以及Lambda表达式
最近学习Qt,发现新大陆,这里做下记录. 主要内容就是原始Qt4的信号槽连接方式,以及Qt5新版的连接方式,还有件事简单演示一下lambda表达式的使用方式 代码如下 /* * 作者:张建伟 * 时间 ...
- 内置方法(item系列)
class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # 获取时触发 print('get ...
- Objective-C 内存管理和ARC
内存管理 范围: 任何继承了NSObject的对象 对基本数据类型无效 原理: 每个对象内部都保存了一个与之相关联的整数 称为引用计数器 1.计数器的基本操作 当使用alloc new或者copy创建 ...