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 jsonp 使用示例代码
Aug 12 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
JavaScript调用客户端Java程序的方法
Jul 27 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
swiper自定义分页器的样式
Sep 14 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php链表用法实例分析
2015/07/09 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
javascript实现密码验证
2015/11/10 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
简单谈谈python的反射机制
2016/06/28 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
python内存动态分配过程详解
2019/07/15 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
数控专业自荐书范文
2014/03/16 职场文书
学校安全责任书范本
2014/07/23 职场文书
好的旅游活动方案
2014/08/19 职场文书
世界气象日活动总结
2015/02/27 职场文书
写给同事的离职感言
2015/08/04 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python