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 相关文章推荐
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
iframe 上下滚动条如何默认在下方实现原理
Dec 10 Javascript
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
Sep 12 Javascript
js获取URL的参数的方法(getQueryString)示例
Sep 29 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
jQuery处理json数据返回数组和输出的方法
Mar 11 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
JavaScript定时器设置、使用与倒计时案例详解
Jul 08 Javascript
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
小程序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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
Python实现队列的方法
2015/05/26 Python
Python自动扫雷实现方法
2015/07/25 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python3中eval函数用法使用简介
2019/08/02 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
英国领先的游戏零售商:GAME
2019/09/24 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
大学生党员自我评价范文
2014/04/09 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
庆祝国庆节标语
2014/10/09 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
Python 正则模块详情
2021/11/02 Python
js前端图片加载异常兜底方案
2022/06/21 Javascript
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技