本文实例讲述了JS工厂模式开发。分享给大家供大家参考,具体如下:
基于JS工厂模式的H5应用,实现了轮播图功能与滑屏功能,并且实现了文字大小的自适应功能,基于SASS样式开发。
核心的JS代码如下:
index.js
define(function(){ var self = null, start = null, move = null, end = null, handle = null, timer = null, left = 0, x = 0, startX = 0, baseWidth = window.screen.width, // 移动设备屏幕的宽度 baseSize = baseWidth * 0.2, // 滑动切换阈值 banner = document.getElementById("banner"), // 获取Banner center = document.getElementById("center"), // 获取center ulList = document.getElementsByTagName("ul"), incBanner = document.getElementById('incBanner'), incCenter = document.getElementById('incCenter'); var app = { init : function(){ self = this; start = self.touchStart; move = self.touchMove; end = self.touchEnd; handle = self.addHandler; self.pageInit(); self.bindTouch(banner, start, move, end); self.bindTouch(center, start, move, end); self.shiftBanner(banner); }, pageInit : function(){ for (var i=0; i < ulList.length; i++) { ulList[i].style.left = 0 + 'px'; ulList[i].style.width = 3 * baseWidth + 'px'; } }, bindTouch : function(elem, handler1, handler2, handler3){ handle(elem, "touchstart", handler1); handle(elem, "touchmove", handler2); handle(elem, "touchend", handler3); }, touchStart : function(event){ var touch = event.touches[0]; left = parseInt(this.style.left); x = 0; startX = 0; startX = touch.pageX; //刚触摸时的坐标 if(this == banner){ timer = clearInterval(timer); } }, touchMove : function(event){ //滑动过程 var touch = event.touches[0]; x = startX - touch.pageX; //滑动的距离 this.style.left = left - x + 'px'; }, touchEnd : function(event){ //手指离开屏幕 self.move(this); self.moveAdjust(this); self.indicate(this); if(this == banner){ self.shiftBanner(banner); } }, move : function(elem){ var leftTmp = left; //缓存touchMove结束时的滑动位置 elem.style.left = left; if (x > baseSize) { elem.style.left = left - baseWidth + 'px'; } else if (x < -baseSize) { elem.style.left = left + baseWidth + 'px'; } else { elem.style.left = leftTmp + 'px'; } }, moveAdjust : function(elem){ left = parseInt(elem.style.left) if (left < -baseWidth * 2) { left = -baseWidth * 2; elem.style.left = left + 'px'; } if (left > 0) { left = 0; elem.style.left = left + 'px'; } x = 0; }, indicate : function(elem){ if (elem == banner) { self.activeClass(incBanner); }else if (elem == center) { self.activeClass(incCenter); } }, activeClass : function(elem){ var len = elem.children.length; for (var i = 0; i < len; i++) { elem.children[i].className=" "; } if (left == 0) { elem.children[0].className = "active"; } else if (left == (-baseWidth)) { elem.children[1].className = "active"; }else if (left == (-2*baseWidth)) { elem.children[2].className = "active"; } }, shiftBanner : function(elem){ var t = new Date(); var tmpLeft = parseInt(elem.style.left); timer = setInterval(function(){ if ((tmpLeft == 0) || (tmpLeft == -baseWidth)) { elem.style.left = tmpLeft - baseWidth + 'px'; } else if (tmpLeft == -2*baseWidth) { elem.style.left = 0 + 'px'; } tmpLeft = parseInt(elem.style.left); left = tmpLeft; // console.log(elem.style.left); // console.log(t); self.indicate(banner); },4000); }, addHandler : function(element, type, handler){ if (element.addEventListener) { element.addEventListener(type, handler, true); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } } }; return { init : function(){ app.init(); } }; });
可以在浏览器中打开: https://iove1123.github.io/policy
项目源码见GitHub:https://github.com/iove1123/policy
更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓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]