UNPKG

mobileoa-common-modules

Version:

移动办公平台前端公共功能模块

125 lines (116 loc) 4.35 kB
'use strict'; var angular = require('angular'); require('../modules'); var module = angular.module('gesturepassword.services'); function GestureScreenLayout(width, height) { this.height = height; this.width = width; this.topContentHeight = GestureScreenLayout.DEFAULT_TOP_CONTENT_HEIGHT; this.bottomContentHeight = GestureScreenLayout.DEFAULT_BOTTOM_CONTENT_HEIGHT; } GestureScreenLayout.DEFAULT_TOP_CONTENT_HEIGHT = 80; GestureScreenLayout.DEFAULT_BOTTOM_CONTENT_HEIGHT = 30; GestureScreenLayout.MIN_RADIUS = 30; GestureScreenLayout.MAX_RADIUS = 60; GestureScreenLayout.MAX_TOP_WHITE = 30; GestureScreenLayout.MAX_BOTTOM_WHITE = 30; GestureScreenLayout.MIN_WHITE = 10; GestureScreenLayout.DEFAULT_INDICATOR_WIDTH = 10; GestureScreenLayout.DEFAULT_INNER_RADIUS = 10; function toInt(num) { return (num + 0.5) | 0; } GestureScreenLayout.prototype = { calcWhite: function() { var contentHeight = this.calcContent().height, whiteSize = (this.height - contentHeight - this.topContentHeight - this.bottomContentHeight) / 2; return (whiteSize + 0.5) | 0; }, calc: function() { var white = this.calcWhite(),//头部和底部的空隙 topContentHeight = this.topContentHeight, content = this.calcContent(),//内容区的实体类信息 contentHeight = content.height,//内容区的高度 topContentStartY = white,//头部空隙 contentStartY = white + this.topContentHeight,//内容区的开始高度 bottomContentStartY = contentStartY + contentHeight + white / 2,//底部内容区的高度 bottomContentHeight = this.bottomContentHeight,//底部内容区的高度 radius = content.radius,//节点的半径 gap = content.white,//节点间的空隙 topWhite = content.topWhite,//中间内容区的顶部空白 leftWhite = content.leftWhite,//内容区左部的空白 bottomWhiteBottomStartY = this.height - bottomContentStartY - bottomContentHeight; return { top: { white: { startY: 0, topHeight: toInt(topContentStartY) }, content: { startY: toInt(topContentStartY), height: toInt(topContentHeight) } }, content: { startY: toInt(contentStartY), startX: toInt(leftWhite), height: toInt(contentHeight), width: toInt(this.width - 2 * leftWhite), radius: toInt(radius), gap: toInt(gap), topWhite: toInt(topWhite), scale: 30 / radius }, bottom: { whiteTop: { startY: toInt(contentStartY + contentHeight), height: toInt(white/2) }, content: { startY: toInt(bottomContentStartY), height: toInt(bottomContentHeight) }, whiteBottom: { startY: toInt(bottomWhiteBottomStartY), height: toInt(white/2) } } }; }, calcContent: function() { var contentMaxHeight = this.height - this.topContentHeight - this.bottomContentHeight; var width = Math.min(this.width, contentMaxHeight); var avgRadius = width / 10; var radius, avgWhite, height = width, white, topWhite, bottomWhite, leftAndRigthWhite, leftWhite; if (avgRadius < GestureScreenLayout.MIN_RADIUS) { radius = GestureScreenLayout.MIN_RADIUS; avgWhite = (height - radius * 6) / 4; white = Math.max(avgWhite, GestureScreenLayout.MIN_WHITE); radius = (height - white * 4) / 6 - 4; } else if (avgRadius > GestureScreenLayout.MAX_RADIUS) { radius = GestureScreenLayout.MAX_RADIUS -4; avgWhite = (height - radius * 6) / 4; white = Math.max(avgWhite, GestureScreenLayout.MIN_WHITE); } else { radius = avgRadius - 4; white = radius; } topWhite = Math.min(white, GestureScreenLayout.MAX_TOP_WHITE); bottomWhite = Math.min(white, GestureScreenLayout.MAX_BOTTOM_WHITE); height = width - (white - topWhite) * 2; leftAndRigthWhite = this.width - 4 * white - 6 * radius; leftWhite = leftAndRigthWhite / 2; return { height: height, radius: Math.round(radius), white: white, topWhite: topWhite, bottomWhite: bottomWhite, leftWhite: leftWhite }; } }; module.factory('GestureScreenLayout', function() { return GestureScreenLayout; }); module.exports = GestureScreenLayout;