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 相关文章推荐
基于jQuery的星级评分插件
Aug 12 Javascript
js中对象的声明方式以及数组的一些用法示例
Dec 11 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 Javascript
javascript二维数组转置实例
Jan 22 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
javascript下string.format函数补充
2010/08/24 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
主管会计岗位职责
2014/03/13 职场文书
机关保密承诺书
2014/06/03 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python