jQuery Scrollify

Version Beta v1.0.5

Date:2017-04-25 23:45

源代码##

(function($, window, document) {

	'user strict';

	var whellEvt = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';
var $window = $(window);
var $document = $(document);
var easing = 'easeOutExpo';
var sHeight = $window.height();
var top = $window.scrollTop();
var heights = [];
var elements = [];
var index = 0;
var isMove = false;
var target = 'body,html';
var scrollBar = false;
var timeout = null;
var isRelaod = true;
var _isIE = false;
var _TIMEOUT_ID_ONE = 0;
var _TIMEOUT_ID_TWO = 0; var settings = {
extraSelector: '',
selector: 'section',
minHeight: 0,
scrollingSpeed: 8e2,
easing: 'easeInOutQuart',
target: 'body,html',
before: function() {},
after: function() {}
}; function sizePanles() {
if (settings.selector) { var selector = '.' + settings.selector,
winHeight = $window.height(); $(selector).each(function() { var $this = $(this); if (!$this.is('.' + settings.extraSelector)) { if (settings.minHeight < winHeight) {
$this.css('height', winHeight);
} else {
$this.css('height', settings.minHeight);
}
} }); }
} function calcePosition() { if (settings.selector) {
var selector = '.' + settings.selector; if (settings.extraSelector) {
selector += ',.' + settings.extraSelector;
} $(selector).each(function(i) {
var $this = $(this); if ($this.is(settings.extraSelector)) {
heights[i] = heights[heights.length - 1] + $this.height();
} else {
heights[i] = $this.offset().top;
}
});
}
} function isScrollEnd(detail) { var scrollBarTime = new Date().getTime(),
diff = 0; top = $window.scrollTop();
sHeight = $window.height(); if (settings.minHeight <= sHeight) {
return true;
} if (detail > 0) { if (top > 0 && index === 0) {
animateScroll(index);
return false;
} else {
return true;
} } else { diff = (settings.minHeight - sHeight) + settings.minHeight * index; if (scrollBarTime - _TIMEOUT_ID_ONE >= 10 && !isMove) { if (top < diff) {
$window.scrollTop(top += 60);
if (top >= diff) {
return true;
} else {
return false;
}
} else {
return true;
} _TIMEOUT_ID_ONE = scrollBarTime;
}
} } function getIndex(callback) { var i = 1,
l = heights.length,
closet = 0,
sHeight = $window.height(),
calcHeight = sHeight / 2,
time = time || 100; top = $window.scrollTop(); for (; i < l; i++) {
if (top + calcHeight >= heights[i]) {
closet = i;
}
} if (settings.extraSelector) { var $extraSelector = $('.' + settings.extraSelector),
extraHeight = $extraSelector.height(); if (top + sHeight > heights[l - 1] + extraHeight / 2) {
closet = l - 1;
}
} index = closet;
callback && callback(); } function isIE() { var b = document.createElement('b');
b.innerHTML = '<!--[if IE]><b></b><![endif]-->';
return !!b.getElementsByTagName('b').length; } function animateScroll(index) {
isMove = true;
settings.before(index);
$(settings.target).stop().animate({
scrollTop: heights[index]
}, settings.scrollingSpeed, settings.easing, function() {
settings.after(index);
isMove = false;
});
//$(settings.target).promise().done(function(){settings.after(index);});
} $.scrollify = function(options) { var core = { init: function() {
top = $window.scrollTop();
_isIE = isIE();
$window.on('scroll', core.scrollHandle);
$window.on('mousedown', core.mousedown);
$window.on('mouseup', core.mouseup);
$document.on(whellEvt, core.wheelHandle); },
mousedown: function() {
scrollBar = true;
},
mouseup: function() {
scrollBar = false;
if (top > 0) {
animateScroll(index);
}
},
wheelHandle: function(e) { var detail = (-e.originalEvent.detail || e.originalEvent.wheelDelta),
time = new Date().getTime(); if (scrollBar) {
scrollBar = false;
return true;
} isRelaod = false; if (isScrollEnd(detail)) { if (time - _TIMEOUT_ID_TWO > settings.scrollingSpeed) { if (_isIE) {
getIndex();
} if (detail < 0) {
if (index < heights.length - 1) {
index++;
animateScroll(index);
_TIMEOUT_ID_TWO = time;
}
} else { if (index > 0) {
index--;
animateScroll(index);
_TIMEOUT_ID_TWO = time;
}
}
}
} e.preventDefault();
e.returnValue = false; },
scrollHandle: function(e) { if (isRelaod) {
isRelaod = false;
getIndex(function() {
animateScroll(index);
}); } else {
if (scrollBar) {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
timeout = setTimeout(function() {
getIndex();
}, 100); }
}
}
} settings = $.extend(settings, options);
sizePanles();
calcePosition(); if (heights.length) { $window.on('resize', function() {
sizePanles();
calcePosition();
$window.scrollTop(heights[index]);
});
core.init();
} }; $.scrollify.move = function(idx) { if (idx >= 0 && idx < heights.length) {
index = idx;
animateScroll(index);
} } }(jQuery, window, document));

说明##

基于Jquery通过滚动滚动条实现的全屏滚动组件,相比于传统的fullpage方式的全屏滚动,它即可以通过滚动条滚动内容,也可以鼠标滚轮全屏滚动内容,使滚动条与全屏滚动有效的结合在一起。同时也支持非溢出的显示内容,在小屏幕下,多余的内容,可以通过额外的滚动全部显示完成后,才会滚动到下一屏。

该全屏组件支持IE7+,但是IE浏览器滚动条不支持 mouseDownmouseUp事件的原因,会有些瑕疵。

该组件目前是测试版本,不确保功能正常,我会继续跟踪改进,如果你有使用到,并且发生了问题,请与我联系:sgt_ah@163.com

使用##

调用方法:

$.scrollify({
'target':'body,html', //滚动的目标容器,默认值为body,html
'selector': 'section', //每个分区的类名,无需加点号.
'extraSelector': 'section-six', //特殊的分区,例如文网文
'minHeight': 600, //每个分区的最低高度,可以不设
'scrollingSpeed': 8e2, //滚动速度,默认值8e2
'easing':'easeInOutQuart', //滚动的动画速度方式。
'before':function, //回调函数,滚动之前
'after':function //回调函数,滚动之后
});

注意##

本组件依赖 jquery.easing 组件

scrollify - 滚动条方式的全屏滚动的更多相关文章

  1. Scrollify – jQuery全屏滚动插件

    和 fullPage.js 一样,Scrollify 也是一款基于 jQuery 的全屏滚动插件.跟 fullPage.js 相比,Scrollify 更加小巧,压缩后不足 4KB.但功能上不如 fu ...

  2. 自己用js实现全屏滚动

    参照fullPage.js的效果,用自己的想法实现的. 实现的效果:1.全屏滚动,滚动一下齿轮就会滚动全屏. 2.自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏. 下一步计划: 1.改 ...

  3. jquery.fullPage.js全屏滚动插件教程演示

    css部分(此处需要导入jquery.fullPage.css) <style> .section { text-align: center; font: 50px "Micro ...

  4. 全屏滚动-jQuery插件实现

    全屏滚动 <---很久没写了,这段忙了点,以后还是每周尽量写点东西---> 在很多情况下,我们需要页面的全屏滚动,尤其是移动端.今天简要的介绍一下全屏滚动的知识. 一.全屏滚动的原理 1. ...

  5. 《fullPage.js》创建全屏滚动的网站

    插件介绍 fullPage.js是一个简单易用的插件,创建全屏滚动的网站(也被称为单页网站).它允许全屏滚动创建网站,以及添加内部滑块. 浏览器兼容性 主要功能 支持鼠标滚动 支持前进后退和键盘控制 ...

  6. 拥抱单页网站! jQuery全屏滚动插件fullPage.js

    不知道从什么时候开始,单页网站就悄悄走进人们的视线,尤其是国外的网站,更是钟爱单页网站.制作一个全屏滚动的效果,然后每个滚动页弄一个好看的背景色,配上一些描述性的文字,大家都喜欢这么弄,仿佛逼格瞬间可 ...

  7. jQuery全屏滚动插件fullPage.js中文帮助文档API

    jQuery全屏滚动插件fullPage.js中文帮助文档API   发现了一个fullPage.js插件,于是百度了一下,还就是这个插件的作用,其实有很多网站都做了全屏滚动的特效,效果也很好看,今天 ...

  8. fullpage.js jq全屏滚动插件

    fullPage.js和fullPage都能实现全屏滚动,二者区别是:fullPage.js需依赖于JQuery库,而fullPage不需要依赖任何一个js库,可以单独使用. (代码演示效果并且可以下 ...

  9. FullPage.js-基于 jQuery 的插件全屏滚动插件

    fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站.如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容, ...

随机推荐

  1. 自学Zabbix3.8.1.2-可视化Visualisation-Graphs自定义图表

    自学Zabbix3.8.1.2-可视化Visualisation-Graphs自定义图表 自定义图表,如名称所示,提供定制功能.虽然简单的图形可以很好地查看单个项目的数据,但是它们不提供配置功能.因此 ...

  2. Redis 订阅发布 - Jedis实现

    Redis 订阅发布 - Jedis实现 我想到使用Redis的订阅发布模式是用来解决推送问题的-. 对于概念性的叙述,多多少少还是要提一下的: ​ 什么是Redis发布订阅?Redis发布订阅是一种 ...

  3. Sphinx学习笔记2

    因为网站搜索的需要,启动了一个搜索引擎项目,其实也算不上完整的搜索引擎,需求很简单,如下:     1)搜索产品名.类别名.品牌名.副标题.关键字等字段     2)数据量目前为13000左右,未来可 ...

  4. HTML5 高级系列:web Storage

    前言 HTML5 的 web Storage 存储方式有两种:localStorage 和 sessionStorage. 这两种方式都是通过键值对保存数据,存取方便,不影响网站性能.他们的用法相同, ...

  5. iOS: FFmpeg编译和使用 学习

    ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大.目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快: 且网上的讲解不够详细,对于初次接触FFM ...

  6. springboot学习(一)——helloworld

    以下内容,如有问题,烦请指出,谢谢 springboot出来也很久了,以前零散地学习了不少,不过很长时间了都没有在实际中使用过了,忘了不少,因此要最近准备抽时间系统的学习积累下springboot,给 ...

  7. Find Unique pair in an array with pairs of numbers 在具有数字对的数组中查找唯一对

    给定一个数组,其中每个元素出现两次,除了一对(两个元素).找到这个唯一对的元素. 输入:第一行输入包含一个表示测试用例数的整数T.然后T测试用例如下.每个测试用例由两行组成.每个测试用例的第一行包含整 ...

  8. 2.sass变量、嵌套、混合(mixin)、继承拓展、@import、comment

    变量.嵌套.混合(mixin).继承拓展.@import.comment 变量的意义 在sass里我们可以定义多个变量来存放颜色.边框等等的样式,这样就可以在下面想要使用样式的时候使用变量了 这样的优 ...

  9. JS中数组的方法

    1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...

  10. MySql Schema 优化

    MySQL Schema 优化:   1.保证你的数据库的整洁性.   2.归档老数据 — 删除查询中检索或返回的多余的行   3.在数据上加上索引.   4.不要过度使用索引,评估你的查询.   5 ...