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. 003_JS基础_面向对象基础

    3.1 对象   引入:在js中表示一个人的信息(name, gender, age)通过var申明三个变量,但是这样使用基本数据类型的变量,他们是互相独立的,没有联系:  此时就需要使用对象,对象是 ...

  2. CSS3 [attribute^=value] 选择器

    设置 class 属性值以 "test" 开头的所有 div 元素的背景色: div[class^="test"] { background:#ffff00; ...

  3. 想要学习jQuery却不知从何开始?本文为你精选5个例子帮你快速成为jQuery大师

    本文阅读对象:WEB前端开发初学者.jQuery初学者.JavaScript初学者 本文目的:jQuery真正入门.快速入门.快速搞清楚jQuery是什么,同时为你的jQuery大师之路开启第一道门. ...

  4. 使用VSCode和VS2017编译调试STM32程序

    近两年,微软越来越拥抱开源支持跨平台,win10搭载Linux子系统,开源VSCode作为跨平台编辑器,VS2017官方支持了Linux和嵌入式开发功能. ST也是,近两年开发的软件工具基本都是跨平台 ...

  5. Python解析JSON详解

    JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数  描述 json.dumps  将 Python 对象编码成 JSON 字符串 json.loads  将已 ...

  6. Android: 工具使用备忘

    Gradle Gradle本地路径设置 如果在AndroidStudio内设置了使用local的Gradle路径,就直接放那边,啥问题都不会有.如果使用推荐的设置,那么更新的时候很有可能会有问题. 在 ...

  7. 【原创】相对完整的一套以Jmeter作为工具的性能测试教程(接口性能测试,数据库性能测试以及服务器端性能监测)

    准备工作 jmeter3.1,为什么是3.1,因为它是要配合使用的serveragent所支持的最高版本,下载链接 https://pan.baidu.com/s/1dWu5Ym JMeterPlug ...

  8. js中的监听事件总结

    javascript事件与功能说明大全:http://tools.jb51.net/table/javascript_event 1.滚动条监听事件 例1:监听滚动条距离页面顶端距离 <scri ...

  9. 【转】 要做linux运维工程师的朋友,必须要掌握以下几个工具才行

          本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入 ...

  10. mysql数据库在windows下安装与配置

      mysql是一种开源源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. MySQL是开放源代码的,因此任何人都可以在General Pu ...