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


项目源码见GitHub:https://github.com/iove1123/policy

JS工厂模式开发实践的更多相关文章

  1. js 工厂模式、简单模式、抽象模式

    简单工厂模式又称为静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类的对象.其实,工厂模式的思想主要是将相同/相似的的对象或类进行提取归类,这样的话,就可以避免写太多重复性 ...

  2. js 工厂模式简要介绍

    什么是工厂模式?就好比一个工厂,能造汽车.飞机...,通过对外接口,由顾客决定,来定制哪一款产品. 在js内表现为,一个工厂函数/对象,包含汽车.飞机等子类,提供对外接口,根据参数返回不同子类的实例 ...

  3. js创建对象的三种方式和js工厂模式创建对象

    文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...

  4. js工厂模式和构造函数

    <!DOCTYPE html><html><head> <title>工厂模式和构造函数</title> <meta charset ...

  5. JS 工厂模式

    1.什么是工厂模式 工厂模式是面向对象的设计模式,作用在于创建一个对象,mixin模式也是面向对象的设计模式,作用在于继承. 工厂模式定义一个接口,让实现这个接口的类来决定实例化哪个类,也就是说通过一 ...

  6. js工厂模式

    设计工厂模式是为了创建对象.通常在类或者类的静态方法中实现,具有两个目标.其中一个是:当创建相似对象时执行重复操作: 另外一个目标是:编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接 ...

  7. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  8. js面向对象(对象/类/工厂模式/构造函数/公有和原型)

    https://www.cnblogs.com/sandraryan/ 什么是对象 js中一切都是对象(有行为和特征).js允许自定义对象,也提供了内建对象(string date math等) 对象 ...

  9. 工厂模式在JS中的实践

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

随机推荐

  1. 学习javascript数据结构(四)——树

    前言 总括: 本文讲解了数据结构中的[树]的概念,尽可能通俗易懂的解释树这种数据结构的概念,使用javascript实现了树,如有纰漏,欢迎批评指正. 原文博客地址:学习javascript数据结构( ...

  2. [SinGuLaRiTy] 复习模板-数学

    [SinGuLaRiTy-1047] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 质因数分解 void solve(int n) { == ...

  3. extends和implements的区别

    extends表示继承 implements表示抽象类的接口

  4. Python调用外部程序——os.system()和subprocess.call

    通过os.system函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序 系统自带的程序的路径一般都已加入环境变量之中,只需在cmd窗口中直接输入程序名称即可. ...

  5. Java数据持久层框架 MyBatis之API学习一(简介)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  6. eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced

    eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced jre 换成6的就好了选 ...

  7. mybatis-XML配置文件

    <?xml version="1.0" encoding="UTF-8" ?><!--plugins在配置文件中的位置必须要符合要求,否则会报 ...

  8. [转]js 正则表达式

    一.正则表达式中包括的元素 1.原子(普通字符:a-z A-Z 0-9 .原子表. 转义字符) 2.元字符 (有特殊功能的字符) 3.模式修正符 (系统内置部分字符 i .m.S.U…) 二.正则表达 ...

  9. flying中的AOP和IOC

    注入属性:private synchronized void injectReferenceServices() { if(this.injectReferenceServicesInitialize ...

  10. Linux中的shell到底是什么?

    (曾经有一段充足的时间放在我面前,可以学linux,而我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此.) 最近,要将项目代码部署到linux环境下运行,但是对linux毫无基础,之前 ...