JS工厂模式开发实践
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工厂模式开发实践的更多相关文章
- js 工厂模式、简单模式、抽象模式
简单工厂模式又称为静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类的对象.其实,工厂模式的思想主要是将相同/相似的的对象或类进行提取归类,这样的话,就可以避免写太多重复性 ...
- js 工厂模式简要介绍
什么是工厂模式?就好比一个工厂,能造汽车.飞机...,通过对外接口,由顾客决定,来定制哪一款产品. 在js内表现为,一个工厂函数/对象,包含汽车.飞机等子类,提供对外接口,根据参数返回不同子类的实例 ...
- js创建对象的三种方式和js工厂模式创建对象
文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...
- js工厂模式和构造函数
<!DOCTYPE html><html><head> <title>工厂模式和构造函数</title> <meta charset ...
- JS 工厂模式
1.什么是工厂模式 工厂模式是面向对象的设计模式,作用在于创建一个对象,mixin模式也是面向对象的设计模式,作用在于继承. 工厂模式定义一个接口,让实现这个接口的类来决定实例化哪个类,也就是说通过一 ...
- js工厂模式
设计工厂模式是为了创建对象.通常在类或者类的静态方法中实现,具有两个目标.其中一个是:当创建相似对象时执行重复操作: 另外一个目标是:编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接 ...
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- js面向对象(对象/类/工厂模式/构造函数/公有和原型)
https://www.cnblogs.com/sandraryan/ 什么是对象 js中一切都是对象(有行为和特征).js允许自定义对象,也提供了内建对象(string date math等) 对象 ...
- 工厂模式在JS中的实践
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
随机推荐
- Linux环境JDK安装
Java的编程离不开jdk,今天本文主要讲下Linux下的JDK安装与配置 1.卸载Linux自带的JDK #检测jdk安装包 [root@localhost ~]# rpm -qa | grep j ...
- 织梦DEDECMS更换目录后页面内的图片和缩略图无法显示解决方法
http://www.win8f.com/seoyouhua/6609.html 很多人碰到织梦更换目录后内容图片和缩略图无法显示的问题,在此,慧鸿网络特地搜集整理了一篇关于织梦出现缩略图和内容无法显 ...
- iOS的相对路径和绝对路径
iOS程序有固定的文件访问限制,只能在自己的沙盒内. UIImage *img=[UIImage imageNamed:@"cellicon.png"]; 这段代码从相对路径加载了 ...
- action之间传参为中文;type='redirect'和 type='redirectAction'主要区别
摘录自:http://blog.csdn.net/lhi705/article/details/7446156 Struts2中action之间传参中文乱码的问题 解决方法一(已经验证,可以): 两个 ...
- c# winform 类似android toast消息功能
先看下效果: 支持动画,支持声音,支持定时自动关闭 使用方法: var notifycation = new Notification("My Notification", &qu ...
- CSS深入理解学习笔记之absolute
1.absolute和float 拥有相同的特性表现: ①包裹性(容器应用之后,可以包裹里面的内容): <!doctype html> <html> <head> ...
- maven系列--settings.xml
安装maven,会有一份settings.xml文件,我们可以理解这份文件就是用来管理本地maven的一系列东西的.这里我先贴出一份完整的原始xml. <?xml version="1 ...
- Linux安装ffmpeg
1.安装ffmpeg 简单步骤: A.首先去官网下载源码包,我的是ffmpeg-3.4.tar.bz2,下载之后上传至Linux准备安装,首先解压安装包: tar -xjvf ffmpeg-3.4 ...
- Android ui 透明度设置
格式如#00FFFFFF,前两位代表不透明度的十六进制.00表示完全透明,FF就是全不透明.依次递增. <?xml version="1.0" encoding=" ...
- PHP中变量的销毁
PHP的变量或对象的销毁可以分成显式销毁和隐式销毁: 1.显式销毁,当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL; 2.隐式销毁,PHP是脚本语言,在代码执行完最后一行时,所 ...