移动开发的时候,我们经常会遇到滑动事件,众所周知手机端滑动主要依靠touch事件。最近接连遇到两个页面都有类似overflow:auto的效果,一般情况下通过css设置是可以实现的(虽说丑了点儿),,但是一旦overflow:auto的元素响应touch事件时就会有诸多不便,例如fullpage中某一元素自滑动,我们可以通过normalScrollElements来使元素滑动的时候不滑动到下一屏,但是在元素滑动到最底部的时候也就不能响应下一屏事件,上滑也是一样,这时候就需要touch事件来响应,为了以后封装方便,特简单封装一个jquery插件,同时也复习一下jquery插件开发及touch事件;
插件大体思路是这样的,如下图所示:方框内区域为固定宽高的父元素(设置overflow:hidden),子元素高度大于父元素,我们通过响应touch事件改变子元素的translate值(top也可以,但是translate效率更高一些),当然在此期间我们需判断子元素translate值的边界,最大为0,最小为子元素高度-父元素高度
ps:如果想做子元素根据手指移动,松开手指后回到边界需另写程序
下面来一步步写插件
第一步,先建立一个安全的作用域
;(function($){ //插入代码 })(jQuery) 如果我们需要通过$(“#id”).xx()方法调用,需要像下面这样写,这里的fn及jquery的prototype; $.extend({ exec:function(){} }) //这种扩展通过$.exec()调用 $.fn.simuScroll = function(option){ var scrollObj=new simuScroll(this,option); return scrollObj.init(); }
下面来看上面代码中的simuScroll方法,这是一个构造函数,它接受两个参数,ele为当前接受touch事件的元素(一般可以设置为父元素),option为用户传入的配置参数,如改变translate的元素,父元素子元素高度,extra为需额外增加的高度,滑动到顶部或底部时执行的回调函数等等;
var simuScroll = function(ele,option){ this.settings = { target : ele, //事件元素 changeTarget:'', outerHeight : '800', //外层高度 innerHeight : '500', //内层高度 extra : '0', //额外增加的距离 swipeUp : null, swipeDown : null, vertical:true }; //通过jquery.extend对默认的settings进行扩展,得出一个全新的对象 this.opt = jQuery.extend({},this.settings,option); this.initNumber = this.lastNumber = this.result = 0; this.flag = false; //计算出子元素与父元素距离差,以此来判定元素的最大滑动距离 this.diff = parseFloat(this.opt.innerHeight) - parseFloat(this.opt.outerHeight) + parseFloat(this.opt.extra); this.diff = this.diff < 0 "htmlcode">init:function(){ //jquery对象直接绑定touch事件获取event需originalEvent获取原生对象的event属性 //jquery对象 获取pagex event.originalEvent.touches[0].pageX //dom对象 event.touches[0].pageX var target = this.opt.target.get(0); //如果子元素高度大于父元素,则执行滑动事件,否则执行回调函数 this.flag = this.diff > 0 "htmlcode">start:function(e,context){ e.preventDefault(); var touches = e.touches[0]; context.initNumber = context.opt.vertical "htmlcode">move:function(e,context){ e.preventDefault(); var touches = e.touches[0]; number = context.opt.vertical "htmlcode">end:function(e,context){ e.preventDefault(); var touches = e.changedTouches[0]; var number = context.opt.vertical "htmlcode">;(function($){ var a = function(m,n){ //函数内容 }; a.prototype = { init:function(){ }, start:function(){ }, move:function(){ }, end:function(){ }, setNumber:function(){ } } $.fn.scrol = function(o){ var obj = new a(this,o); return obj.init() } })(jQuery)调用时如下:
$(".outer").simuScroll({ 'outerHeight':$(".outer").height(), 'innerHeight':$('.inner').height(), 'changeTarget' : $(".inner"), 'swipeUp' :function(){ console.log('up') }, 'swipeDown' :function(){ console.log('down') }, vertical:true })以上所述是小编给大家介绍的JS+CSS3模拟溢出滚动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
DDR爱好者之家 Design By 杰米广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!DDR爱好者之家 Design By 杰米暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]