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 RuntimeObject() 获取ie里面自定义函数或者属性的集合
Nov 23 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
js给onclick赋值传参数的两种方法
Nov 25 Javascript
javascript实现切换td中的值
Dec 05 Javascript
浅析javascript 定时器
Dec 23 Javascript
jquery带动画效果幻灯片特效代码
Aug 27 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
Feb 06 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
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
js HTML5上传示例代码完整版
2016/10/10 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
《埃及的金字塔》教学反思
2014/04/07 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
任命书标准格式
2015/03/02 职场文书
人口与计划生育责任书
2015/05/09 职场文书
2016国培学习心得体会
2016/01/08 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
高中美术教学反思
2016/02/17 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
Go语言编译原理之变量捕获
2022/08/05 Golang