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的Tab选项框效果代码(插件)
Mar 01 Javascript
JavaScript面向对象程序设计三 原型模式(上)
Dec 21 Javascript
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
jQuery的ready方法详解
Nov 27 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
JS实现页面打印功能
Mar 16 Javascript
如何理解Vue的作用域插槽的实现原理
Aug 19 Javascript
jQuery实现简单轮播图效果
Dec 27 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获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP中文编码小技巧
2014/12/25 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
Python自动连接ssh的方法
2015/03/07 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python对于requests的封装方法详解
2019/01/03 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
详解Python time库的使用
2019/10/10 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python实现拼接图片
2020/03/23 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
25岁生日感言
2014/01/13 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
go设置多个GOPATH的方式
2021/05/05 Golang