问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jquery全屏滚动插件怎么用

发布网友 发布时间:2022-04-07 06:40

我来回答

2个回答

懂视网 时间:2022-04-07 11:02

基本思路是封装一个Slider类, 拥有默认初始配置参数。

Slider.prototype(原型链上)拥有实现滑动的方法,通过监听手势,实现滑动的效果。

比较复杂的滑动效果, 可以使用Swiper.js 来实现。

(推荐教程:javascript教程)

代码如下:

/* PollyFill for iOS 5.* */
if (!Function.prototype.bind) {
 Function.prototype.bind = function (oThis) {
 var args = Array.prototype.slice.call(arguments, 1)
 var f2bind = this
 var fnop = function () {}
 var bound = function () {
 return f2bind.apply(this instanceof fnop && oThis
 ? this
 : oThis,
 args.concat(Array.prototype.slice.call(arguments)))
 }
 fnop.prototype = this.prototype
 bound.prototype = new fnop()
 return bound
 }
}

// 添加浏览器前缀
function prefix(style) {
 var vendor = (function() {
 var transArr = ['transform', 'webkitTransform', 'MozTransform', 'msTranform', 'OTransform'],
 vendors = ['', 'webkit', 'Moz', 'ms', 'O'],
 elementStyle = document.createElement('div').style

 for (var i = 0; i < vendors.length; i++) {
 if (transArr[i] in elementStyle) {
 return vendors[i]
 }
 }

 return false
 })()

 if (vendor === false) return false
 if (vendor === '') return style
 return vendor + style.charAt(0).toUpperCase() + style.substr(1)
}

var TRANSFORM = prefix('transform'),
 TRANSITION = prefix('transition')

var Slider = function(options) {
 // 初始化配置参数
 this.options = $.extend({
 slideWrap: '.pages', // 容器
 slideItem: '.page', // 滑动单元的元素
 direction: 'Y', // 滑动的方向
 effect: 'slide', // 滑动的效果
 triggleDist: 100, // 触发滑动的手指移动最小位移
 followFinger: true, // 是否跟随手指移动
 duration: .4, // 翻页的延时
 currentIdx: 0 // 初始显示的页码
 }, options)

 var EffectDict = {
 'slide' : ['slide', 'slide'],
 'scale' : ['slide', 'scale']
 }

 this.pagesWrap = document.querySelector(this.options.slideWrap)
 this.pages = document.querySelectorAll(this.options.slideItem)

 this.hook = this.options.slideController
 this._total = this.pages.length
 this._pageX = 0
 this._pageY = 0
 this._distance = 0 // 页面之间切换的距离
 this._moveDist = 0 // touch 滑动的距离
 this._supportTouch = 'ontouchend' in window
 this._touching = false

 this._enter = this[EffectDict[this.options.effect][0]].bind(this)
 this._leave = this[EffectDict[this.options.effect][1]].bind(this)

 this._init()
 this._bindEvents()
}
Slider.prototype = {
 _init: function() {
 var width = this.pagesWrap.clientWidth,
 height = this.pagesWrap.clientHeight,
 currentIdx = this.options.currentIdx,
 pages = this.pages,
 total = this._total,
 distance = this._distance = (this.options.direction == 'Y' ? height : width)

 // 初始化各个 page 的位置
 for (var i = 0; i < this._total; i++) {
 if (i == currentIdx) {
 pages[i].classList.add('current')
 } else {
 this._enter(pages[i], i < currentIdx ? -distance : distance, 2)
 }
 }
 },

 _bindEvents: function() {
 var _this = this,
 pagesWrap = this.pagesWrap

 var events = this._supportTouch ? 'touchstart touchmove touchend touchcancel' : 'mousedown mousemove mouseup mousecancel'

 events.split(' ').forEach(function(e) {
 pagesWrap.addEventListener(e, _this)
 })

 window.addEventListener('orientationchange', this)
 window.addEventListener('resize', this)
 },

 handleEvent: function(e) {
 switch (e.type) {
 case 'orientationchange':
 case 'resize':
 this._init()
 break
 case 'touchstart':
 case 'mousedown':
 this._start(e)
 break
 case 'touchmove':
 case 'mousemove':
 this._move(e)
 break
 case 'touchend':
 case 'touchcancel':
 case 'mouseup':
 case 'mousecancel':
 this._end(e)
 break
 }
 },

 _start: function(e) {
 if (this._touching) {
 e.preventDefault()
 e.stopPropagation()
 return
 }

 this._touching = true
 this._moveDist = 0

 var touches = (this._supportTouch ? e.touches[0] : e),
 distance = this._distance,
 enter = this._enter

 var $current = this.pages[this.options.currentIdx],
 $next = $current.nextElementSibling,
 $prev = $current.previousElementSibling

 this._pageX = touches.pageX
 this._pageY = touches.pageY

 $current.style.zIndex = 1

 if ($next) {
 $next.style.zIndex = 2
 enter($next, distance)
 }

 if ($prev) {
 $prev.style.zIndex = 2
 enter($prev, -distance)
 }
 },

 _move: function(e) {
 e.preventDefault()

 if (!this._touching) return

 var touches = (this._supportTouch ? e.touches[0] : e),
 direction = this.options.direction,
 distance = this._distance

 var currentIdx = this.options.currentIdx,
 $current = this.pages[this.options.currentIdx],
 $next = $current.nextElementSibling,
 $prev = $current.previousElementSibling,
 xDist = touches.pageX - this._pageX,
 yDist = touches.pageY - this._pageY,
 enter = this._enter,
 leave = this._leave,
 moveDist = this._moveDist = (direction == 'X' ? xDist : yDist)

 if (this.options.followFinger) {
 $next && enter($next, moveDist + distance)
 $prev && enter($prev, moveDist - distance)

 // 因为不能翻页,所以制造拖动困难的效果
 if ((currentIdx == 0 && moveDist > 0) || (currentIdx == this._total && moveDist < 0)) {
 return this.slide($current, moveDist / 4)
 }

 leave($current, moveDist)
 }
 },

 _end: function(e) {
 var move = this._moveDist,
 distance = this._distance,
 triggleDist = this.options.triggleDist,
 enter = this._enter,
 $current = this.pages[this.options.currentIdx],
 $next = $current.nextElementSibling,
 $prev = $current.previousElementSibling

 this._touching = false

 this._enter($current, 0)
 $next && enter($next, distance)
 $prev && enter($prev, -distance)

 if ($next && move < -triggleDist && this.hook.shouldGoToNext($current)) return this._next()
 if ($prev && move > triggleDist && this.hook.shouldGoToPrev($current)) return this._prev()
 },

 _next: function() {
 this.go2page(this.options.currentIdx + 1)
 },

 _prev: function() {
 this.go2page(this.options.currentIdx - 1)
 },

 go2page: function(idx) {

 var $current = this.pages[this.options.currentIdx],
 $target = this.pages[idx],
 enter = this._enter,
 leave = this._leave,
 distance = (idx < this.options.currentIdx ? this._distance : -this._distance)

 $($target).one('webkitTransitionEnd', function() {
 $current.classList.remove('current')
 $target.classList.add('current')
 this.hook.didGoToPage($target, $current)
 }.bind(this))

 leave($current, distance)
 enter($target, 0)

 this._moveDist = 0
 this.options.currentIdx = idx
 },


 /**
 * 切页的效果
 * 目前只支持两种效果:
 * 1. Slide(普通的滑动)
 * 2. Scale(缩放滑动)
 */
 slide: function(el, val, need) {
 need = need || 1
 el.style.webkitTransition = (need == 1) ? 'all 0.4s' : ''
 el.style[TRANSFORM] = 'translate3d(' + ('Y' == this.options.direction ? '0, ' + val + 'px' : (val + 'px, 0')) + ',0)'
 },

 scale: function(el, val) {
 el.style.webkitTransition = 'all 0.4s'
 el.style[TRANSFORM] = 'scale(' + (1 - Math.round(Math.abs(val) / this._distance / 4*100) / 100) + ') translateZ(0)'
 }
}

var slideController = {
 shouldGoToPrev: function(el) {
 return false;
 },
 shouldGoToNext: function(el) {
 return false;;
 },
 didGoToPage: function(el, prevEl) {
 return false;
 }
}


function query(selector){
 return document.querySelector(selector);
}

相关视频教程推荐:javascript视频教程

热心网友 时间:2022-04-07 08:10

1、引入文件
<link
rel="stylesheet"
href="css/jquery.fullPage.css">
<script
src="js/jquery.min.js"></script>
<!--
jquery.easings.min.js
用于
easing
参数,也可以使用完整的
jQuery
UI
代替,如果不需要设置
easing
参数,可去掉改文件
-->
<script
src="js/jquery.easings.min.js"></script>
<!--
如果
scrollOverflow
设置为
true,则需要引入
jquery.slimscroll.min.js,一般情况下不需要
-->
<script
src="js/jquery.slimscroll.min.js"></script>
<script
src="js/jquery.fullPage.js"></script>
2、HTML
<div
id="dowebok">
<div
class="section">
<h3>第一屏</h3>
</div>
<div
class="section">
<h3>第二屏</h3>
</div>
<div
class="section">
<h3>第三屏</h3>
</div>
<div
class="section">
<h3>第四屏</h3>
</div>
</div>
每个
section
代表一屏,默认显示“第一屏”,如果要指定加载页面时显示的“屏幕”,可以在对应的
section
加上
class=”active”,如:
<div
class="section
active">第三屏</div>
同时,可以在
section
内加入
slide,如:
<div
id="dowebok">
<div
class="section">第一屏</div>
<div
class="section">第二屏</div>
<div
class="section">
<div
class="slide">第三屏的第一屏</div>
<div
class="slide">第三屏的第二屏</div>
<div
class="slide">第三屏的第三屏</div>
<div
class="slide">第三屏的第四屏</div>
</div>
<div
class="section">第四屏</div>
</div>
3、JavaScript
$(function(){
$('#dowebok').fullpage();
});
更多相关内容可参考资料www.viiboo.cn
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 怎么解除未成年人的实名认证 怎么解除未成年实名认证 网商银行的额度怎么没有了 未成年人如何解除实名认证 网商贷总额度到12月16日,是说要一次性将贷款全部还清吗? 网商贷借了十万,突然降额到五万,是不是要把多的立刻还上? 网商贷额度到期但是还没有还完,会要求一次性还完吗?还是会降低额度 高压电缆金属屏蔽层一定是铜屏蔽层吗?是行业规定吗? 变电所内设备和控制回路的屏蔽电缆屏蔽层设计要求进行接地外,还应满足什么要求 控制电缆接地标准 电力电缆导体屏蔽层的厚度怎么确定 8月全家人去大理旅游适合吗 大理,丽江五天游 大理有什么美景?如果你能帮我的话,那就太好了 推荐几个云南大理周围都有什么经典的景点可以去么 大理古城的这几个景点,你一定要去 大理有哪些好玩的地方? 大理有哪些最值得去的景点? 云南大理有哪几个景点最值得去? 请问公积金在封存怎么取出来。我是外地人,交的时候说是可以取出来的,人在上海 外地人怎么提取公积金 梦见和情人的情人打架并把他给杀死了 梦见老公和他情人的情人打架 梦见和情人的情人刀刹, 外地人在上海可以申请公租房吗 上海奉贤本月推出514套公租房新房源,哪些人可以申请公租房? 关于党政机关公文格式的一些问题 js或jq怎么实现滚轮控制页面上下滑动 发动机烧机油却不冒蓝烟是怎么回事? 如何成为信用卡分期付款合作商户 柴油机烧机油为什么不冒蓝烟? 如何申请银行信用卡分期商户 没有漏油,排气管也没有冒蓝烟,机油却经常少,什么原因? 如何成为银行的信用卡分期付款商户 讪德卡480G7烧机油但不冒蓝烟什么情况 要成为信用卡分期付款商户需要什么样的条件? 车子不冒蓝烟但耗机油什么原因? 信用卡账单分期,商户分期,消费分期各自是怎么一回事 机油消耗标准,机油消耗大却不冒蓝烟什么问题? 烧机油不冒蓝烟用修吗? 招行商务信用卡分期问题