blob: e3e17e8af4bed2adaabe85d0259c39a7b697759e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import Utils from '../../utils';
const Region = {
regions: [],
isCross (region) {
const { regions } = this;
region.right = region.left + region.width;
region.bottom = region.top + region.height;
for (let i = 0; i < regions.length; i++) {
const curRegion = regions[i];
// 两区域相交
curRegion.right = curRegion.left + curRegion.width;
curRegion.bottom = curRegion.top + curRegion.height;
if (!(region.left > curRegion.right || region.right < curRegion.left || region.bottom < curRegion.top || region.top > curRegion.bottom)) {
return true;
}
}
return false;
},
get (width, height) {
if (!width || !height) {
return;
}
let i = 1000;
const viewWidth = 750;
const viewHeight = Utils.env.getPageHeight();
let wrapWidth = viewWidth - width;
let wrapHeight = viewHeight - height - 140;
wrapHeight = wrapHeight < 0 ? 0 : wrapHeight;
wrapWidth = wrapWidth < 0 ? 0 : wrapWidth;
const region = {
left: '-9999px',
top: '-9999px',
width: width + 'px',
height: height + 'px'
};
while (i--) {
region.left = Math.round(Math.random() * wrapWidth) + 'px';
region.top = Math.round(Math.random() * wrapHeight + height) + 'px';
if (!this.isCross(region)) {
this.add(region);
return region;
}
}
},
buildRandom () {
return new Date().getTime() + '_' + parseInt(Math.random() * 1000000);
},
add (region) {
const { regions } = this;
region.id = this.buildRandom();
regions.push(region);
},
remove (region) {
const { regions } = this;
if (!region) return;
for (let i = 0; i < regions.length; i++) {
if (region.id === regions[i].id) {
regions.splice(i, 1);
}
}
}
};
export default Region;