JS工厂模式开发实践案例分析


Posted in Javascript onOctober 17, 2019

本文实例讲述了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

JS工厂模式开发实践案例分析

项目源码见GitHub:https://github.com/iove1123/policy

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js AspxButton的客户端操作
Jun 26 Javascript
THREE.JS入门教程(3)着色器-下
Jan 24 Javascript
javascript常见用法总结
May 22 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
jquery radio的取值_radio的选中_radio的重置方法
Sep 20 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
JS实现根据用户输入分钟进行倒计时功能
Nov 14 Javascript
vue.js组件之间传递数据的方法
Jul 10 Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
JavaScript数组方法的错误使用例子
Sep 13 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
何时使用Map来代替普通的JS对象
Apr 29 Javascript
小程序input数据双向绑定实现方法
Oct 17 #Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 #Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 #Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 #Javascript
Layui事件监听的实现(表单和数据表格)
Oct 17 #Javascript
浅谈Vue.set实际上是什么
Oct 17 #Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 #Javascript
You might like
PHP也可以?成Shell Script
2006/10/09 PHP
PHP中的日期及时间
2006/11/23 PHP
php生成随机密码的几种方法
2011/01/17 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python的另外几种语言实现
2015/01/29 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
欢送退休感言
2014/02/08 职场文书
付款委托书范本
2014/10/05 职场文书
上课说话检讨书
2015/01/27 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
MySQL优化之慢日志查询
2022/06/10 MySQL