浏览代码

定位优化

DESKTOP-6LTVLN7\Liumouren 1 年之前
父节点
当前提交
07dc94ee41
共有 7 个文件被更改,包括 1093 次插入44 次删除
  1. 184 3
      css/home.css
  2. 123 0
      css/mui.imageviewer.css
  3. 382 0
      js/mui.previewimage.js
  4. 322 0
      js/mui.zoom.js
  5. 42 26
      js/util.js
  6. 2 0
      pages/home.html
  7. 38 15
      pages/map.html

+ 184 - 3
css/home.css

@@ -487,11 +487,9 @@
 	top: 120px;
 	left: 5px;
 	background-color: #FFF;
-	padding: 0.4rem;
 	/* background-image: linear-gradient(-45deg, #409EFF, #409EFFaa); */
 	font-size: 14px;
 	width: 2rem;
-	height: 2rem;
 	border-radius: 0.15rem;
 	display: flex;
 	flex-direction: column;
@@ -505,6 +503,9 @@
 	color: #000;
 	z-index: 999;
 }
+.changeType2 div{
+	padding: 5px;
+}
 
 .mui-bar .mui-title {
 	font-weight: bold;
@@ -836,4 +837,184 @@
 	color: #34c6d8;
 	display: flex;
 	align-items: center;
-} */
+} */
+
+.mui-preview-image.mui-fullscreen {
+	position: fixed;
+	z-index: 20;
+	background-color: #000;
+}
+
+.mui-preview-header,
+.mui-preview-footer {
+	position: absolute;
+	width: 100%;
+	left: 0;
+	z-index: 10;
+}
+
+.mui-preview-header {
+	height: 44px;
+	top: 0;
+}
+
+.mui-preview-footer {
+	height: 50px;
+	bottom: 0px;
+}
+
+.mui-preview-header .mui-preview-indicator {
+	display: block;
+	line-height: 25px;
+	color: #fff;
+	text-align: center;
+	margin: 15px auto 4;
+	width: 70px;
+	background-color: rgba(0, 0, 0, 0.4);
+	border-radius: 12px;
+	font-size: 16px;
+}
+
+.mui-preview-image {
+	display: none;
+	-webkit-animation-duration: 0.5s;
+	animation-duration: 0.5s;
+	-webkit-animation-fill-mode: both;
+	animation-fill-mode: both;
+}
+
+.mui-preview-image.mui-preview-in {
+	-webkit-animation-name: fadeIn;
+	animation-name: fadeIn;
+}
+
+.mui-preview-image.mui-preview-out {
+	background: none;
+	-webkit-animation-name: fadeOut;
+	animation-name: fadeOut;
+}
+
+.mui-preview-image.mui-preview-out .mui-preview-header,
+.mui-preview-image.mui-preview-out .mui-preview-footer {
+	display: none;
+}
+
+.mui-zoom-scroller {
+	position: absolute;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	-webkit-box-align: center;
+	-webkit-align-items: center;
+	align-items: center;
+	-webkit-box-pack: center;
+	-webkit-justify-content: center;
+	justify-content: center;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	margin: 0;
+	-webkit-backface-visibility: hidden;
+}
+
+.mui-zoom {
+	-webkit-transform-style: preserve-3d;
+	transform-style: preserve-3d;
+}
+
+.mui-slider .mui-slider-group .mui-slider-item img {
+	width: auto;
+	height: auto;
+	max-width: 100%;
+	max-height: 100%;
+}
+
+.mui-android-4-1 .mui-slider .mui-slider-group .mui-slider-item img {
+	width: 100%;
+}
+
+.mui-android-4-1 .mui-slider.mui-preview-image .mui-slider-group .mui-slider-item {
+	display: inline-table;
+}
+
+.mui-android-4-1 .mui-slider.mui-preview-image .mui-zoom-scroller img {
+	display: table-cell;
+	vertical-align: middle;
+}
+
+.mui-preview-loading {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	display: none;
+}
+
+.mui-preview-loading.mui-active {
+	display: block;
+}
+
+.mui-preview-loading .mui-spinner-white {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-left: -25px;
+	margin-top: -25px;
+	height: 50px;
+	width: 50px;
+}
+
+.mui-preview-image img.mui-transitioning {
+	-webkit-transition: -webkit-transform 0.5s ease, opacity 0.5s ease;
+	transition: transform 0.5s ease, opacity 0.5s ease;
+}
+
+@-webkit-keyframes fadeIn {
+	0% {
+		opacity: 0;
+	}
+
+	100% {
+		opacity: 1;
+	}
+}
+
+@keyframes fadeIn {
+	0% {
+		opacity: 0;
+	}
+
+	100% {
+		opacity: 1;
+	}
+}
+
+@-webkit-keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 0;
+	}
+}
+
+@keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 0;
+	}
+}
+
+.img {
+	max-width: 100%;
+	height: auto;
+}
+

+ 123 - 0
css/mui.imageviewer.css

@@ -0,0 +1,123 @@
+.mui-imageviewer {
+	position: absolute;
+	position: fixed;
+	background-color: rgba(0, 0, 0, 0.9);
+	width: 100%;
+	height: 100%;
+	z-index: 99;
+	left: 0px;
+	top: 0px;
+	display: none;
+	opacity: 0;
+	-webkit-transition: all 0.6s ease-in-out;
+	transition: all 0.6s ease-in-out;
+	-webkit-transform-style: preserve-3d;
+	-webkit-backface-visibility: hidden;
+	overflow: hidden;
+	margin: 0px;
+	padding: 0px;
+	box-sizing: border-box;
+}
+.mui-imageviewer-mask {
+	position: absolute;
+	z-index: 11;
+	width: 100%;
+	height: 100%;
+	left: 0px;
+	top: 0px;
+	display: none;
+}
+.mui-imageviewer .mui-imageviewer-header {
+	position: absolute;
+	height: 45px;
+	width: 100%;
+	left: 0px;
+	top: 0px;
+	z-index: 10;
+	background-color: rgba(0, 0, 0, 0.5);
+	margin: 0px;
+	padding: 0px;
+	box-sizing: border-box;
+}
+.mui-imageviewer .mui-imageviewer-state {
+	display: block;
+	width: 100%;
+	height: 100%;
+	line-height: 100%;
+	color: #eee;
+	text-align: center;
+	font-size: 16px;
+	padding: 15px;
+}
+.mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close {
+	position: absolute;
+	top: 5px;
+	right: 5px;
+	font-size: 32px;
+	color: #aaa;
+}
+.mui-imageviewer .mui-imageviewer-header .mui-imageviewer-close:active {
+	color: #FF5053;
+}
+.mui-imageviewer .mui-imageviewer-item {
+	width: 100%;
+	height: 100%;
+	left: 0px;
+	top: 0px;
+	position: absolute;
+	z-index: 0;
+	margin: 0px;
+	padding: 0px;
+	box-sizing: border-box;
+	-webkit-transition: -webkit-transform 500ms ease-in-out;
+	transition: transform 500ms ease-in-out;
+	display: table;
+	overflow: hidden;
+}
+.mui-imageviewer .mui-imageviewer-item-center {
+	-webkit-transform: translateX(0);
+	transform: translateX(0);
+}
+.mui-imageviewer .mui-imageviewer-item-left {
+	-webkit-transform: translateX(-100%);
+	transform: translateX(-100%);
+}
+.mui-imageviewer .mui-imageviewer-item-right {
+	-webkit-transform: translateX(100%);
+	transform: translateX(100%);
+}
+.mui-imageviewer .mui-imageviewer-item span {
+	display: table-cell;
+	text-align: center;
+	vertical-align: middle;
+	line-height: 100%;
+	font-size: 100%;
+	margin: 0px;
+	padding: 0px;
+	box-sizing: border-box;
+	overflow: auto;
+}
+.mui-imageviewer .mui-imageviewer-item img {
+	backface-visibility: hidden;
+	transform-origin: 50% 50% 0px;
+	max-width: 100%;
+}
+.mui-imageviewer-left,
+.mui-imageviewer-right {
+	position: absolute;
+	z-index: 2;
+	color: #aaa;
+	top: 50%;
+	margin-top: -18px;
+	font-size: 36px;
+}
+.mui-imageviewer-left {
+	left: 5px;
+}
+.mui-imageviewer-right {
+	right: 5px;
+}
+.mui-imageviewer-left:active,
+.mui-imageviewer-right:active {
+	color: #fff;
+}

+ 382 - 0
js/mui.previewimage.js

@@ -0,0 +1,382 @@
+(function($, window) {
+
+	var template = '<div id="{{id}}" class="mui-slider mui-preview-image mui-fullscreen"><div class="mui-preview-header">{{header}}</div><div class="mui-slider-group"></div><div class="mui-preview-footer mui-hidden">{{footer}}</div><div class="mui-preview-loading"><span class="mui-spinner mui-spinner-white"></span></div></div>';
+	var itemTemplate = '<div class="mui-slider-item mui-zoom-wrapper {{className}}"><div class="mui-zoom-scroller"><img src="{{src}}" data-preview-lazyload="{{lazyload}}" style="{{style}}" class="mui-zoom"></div></div>';
+	var defaultGroupName = '__DEFAULT';
+	var div = document.createElement('div');
+	var imgId = 0;
+	var PreviewImage = function(options) {
+		this.options = $.extend(true, {
+			id: '__MUI_PREVIEWIMAGE',
+			zoom: true,
+			header: '<span class="mui-preview-indicator"></span>',
+			footer: ''
+		}, options || {});
+		this.init();
+		this.initEvent();
+	};
+	var proto = PreviewImage.prototype;
+	proto.init = function() {
+		var options = this.options;
+		var el = document.getElementById(this.options.id);
+		if (!el) {
+			div.innerHTML = template.replace(/\{\{id\}\}/g, this.options.id).replace('{{header}}', options.header).replace('{{footer}}', options.footer);
+			document.body.appendChild(div.firstElementChild);
+			el = document.getElementById(this.options.id);
+		}
+
+		this.element = el;
+		this.scroller = this.element.querySelector($.classSelector('.slider-group'));
+		this.indicator = this.element.querySelector($.classSelector('.preview-indicator'));
+		this.loader = this.element.querySelector($.classSelector('.preview-loading'));
+		if (options.footer) {
+			this.element.querySelector($.classSelector('.preview-footer')).classList.remove($.className('hidden'));
+		}
+		this.addImages();
+	};
+	proto.initEvent = function() {
+		var self = this;
+		$(document.body).on('tap', 'img[data-preview-src]', function() {
+			self.open(this);
+			return false;
+		});
+		var laterClose = null;
+		var laterCloseEvent = function() {
+			!laterClose && (laterClose = $.later(function() {
+				self.loader.removeEventListener('tap', laterCloseEvent);
+				self.scroller.removeEventListener('tap', laterCloseEvent);
+				self.close();
+			}, 300));
+		};
+		this.scroller.addEventListener('doubletap', function() {
+			if (laterClose) {
+				laterClose.cancel();
+				laterClose = null;
+			}
+		});
+		this.element.addEventListener('webkitAnimationEnd', function() {
+			if (self.element.classList.contains($.className('preview-out'))) { //close
+				self.element.style.display = 'none';
+				self.element.classList.remove($.className('preview-out'));
+				self.element.classList.remove($.className('preview-in'));
+				laterClose = null;
+			} else { //open
+				self.loader.addEventListener('tap', laterCloseEvent);
+				self.scroller.addEventListener('tap', laterCloseEvent);
+			}
+		});
+		this.element.addEventListener('slide', function(e) {
+			if (self.options.zoom) {
+				var lastZoomerEl = self.element.querySelector('.mui-zoom-wrapper:nth-child(' + (self.lastIndex + 1) + ')');
+				if (lastZoomerEl) {
+					$(lastZoomerEl).zoom().setZoom(1);
+				}
+			}
+			var slideNumber = e.detail.slideNumber;
+			self.lastIndex = slideNumber;
+			self.indicator && (self.indicator.innerText = (slideNumber + 1) + '/' + self.currentGroup.length);
+			self._loadItem(slideNumber);
+
+		});
+	};
+	proto.addImages = function(group, index) {
+		this.groups = {};
+		var imgs = [];
+		if (group) {
+			if (group === defaultGroupName) {
+				imgs = document.querySelectorAll("img[data-preview-src]:not([data-preview-group])");
+			} else {
+				imgs = document.querySelectorAll("img[data-preview-src][data-preview-group='" + group + "']");
+			}
+		} else {
+			imgs = document.querySelectorAll("img[data-preview-src]");
+		}
+		if (imgs.length) {
+			for (var i = 0, len = imgs.length; i < len; i++) {
+				this.addImage(imgs[i]);
+			}
+		}
+	};
+	proto.addImage = function(img) {
+		var group = img.getAttribute('data-preview-group');
+		group = group || defaultGroupName;
+		if (!this.groups[group]) {
+			this.groups[group] = [];
+		}
+		var src = img.getAttribute('src');
+		if (img.__mui_img_data && img.__mui_img_data.src === src) { //已缓存且图片未变化
+			this.groups[group].push(img.__mui_img_data);
+		} else {
+			var lazyload = img.getAttribute('data-preview-src');
+			if (!lazyload) {
+				lazyload = src;
+			}
+			var imgObj = {
+				src: src,
+				lazyload: src === lazyload ? '' : lazyload,
+				loaded: src === lazyload ? true : false,
+				sWidth: 0,
+				sHeight: 0,
+				sTop: 0,
+				sLeft: 0,
+				sScale: 1,
+				el: img
+			};
+			this.groups[group].push(imgObj);
+			img.__mui_img_data = imgObj;
+		}
+	};
+
+
+	proto.empty = function() {
+		this.scroller.innerHTML = '';
+	};
+	proto._initImgData = function(itemData, imgEl) {
+		if (!itemData.sWidth) {
+			var img = itemData.el;
+			itemData.sWidth = img.offsetWidth;
+			itemData.sHeight = img.offsetHeight;
+			var offset = $.offset(img);
+			itemData.sTop = offset.top;
+			itemData.sLeft = offset.left;
+			itemData.sScale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight);
+		}
+		imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
+	};
+
+	proto._getScale = function(from, to) {
+		var scaleX = from.width / to.width;
+		var scaleY = from.height / to.height;
+		var scale = 1;
+		if (scaleX <= scaleY) {
+			scale = from.height / (to.height * scaleX);
+		} else {
+			scale = from.width / (to.width * scaleY);
+		}
+		return scale;
+	};
+	proto._imgTransitionEnd = function(e) {
+		var img = e.target;
+		img.classList.remove($.className('transitioning'));
+		img.removeEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
+	};
+	proto._loadItem = function(index, isOpening) { //TODO 暂时仅支持img
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
+		var itemData = this.currentGroup[index];
+		var imgEl = itemEl.querySelector('img');
+		this._initImgData(itemData, imgEl);
+		if (isOpening) {
+			var posi = this._getPosition(itemData);
+			imgEl.style.webkitTransitionDuration = '0ms';
+			imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
+			imgEl.offsetHeight;
+		}
+		if (!itemData.loaded && imgEl.getAttribute('data-preview-lazyload')) {
+			var self = this;
+			self.loader.classList.add($.className('active'));
+			//移动位置动画
+			imgEl.style.webkitTransitionDuration = '0.5s';
+			imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
+			imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
+			this.loadImage(imgEl, function() {
+				itemData.loaded = true;
+				imgEl.src = itemData.lazyload;
+				self._initZoom(itemEl, this.width, this.height);
+				imgEl.classList.add($.className('transitioning'));
+				imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
+				imgEl.setAttribute('style', '');
+				imgEl.offsetHeight;
+				self.loader.classList.remove($.className('active'));
+			});
+		} else {
+			itemData.lazyload && (imgEl.src = itemData.lazyload);
+			this._initZoom(itemEl, imgEl.width, imgEl.height);
+			imgEl.classList.add($.className('transitioning'));
+			imgEl.addEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
+			imgEl.setAttribute('style', '');
+			imgEl.offsetHeight;
+		}
+		this._preloadItem(index + 1);
+		this._preloadItem(index - 1);
+	};
+	proto._preloadItem = function(index) {
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
+		if (itemEl) {
+			var itemData = this.currentGroup[index];
+			if (!itemData.sWidth) {
+				var imgEl = itemEl.querySelector('img');
+				this._initImgData(itemData, imgEl);
+			}
+		}
+	};
+	proto._initZoom = function(zoomWrapperEl, zoomerWidth, zoomerHeight) {
+		if (!this.options.zoom) {
+			return;
+		}
+		if (zoomWrapperEl.getAttribute('data-zoomer')) {
+			return;
+		}
+		var zoomEl = zoomWrapperEl.querySelector($.classSelector('.zoom'));
+		if (zoomEl.tagName === 'IMG') {
+			var self = this;
+			var maxZoom = self._getScale({
+				width: zoomWrapperEl.offsetWidth,
+				height: zoomWrapperEl.offsetHeight
+			}, {
+				width: zoomerWidth,
+				height: zoomerHeight
+			});
+			$(zoomWrapperEl).zoom({
+				maxZoom: Math.max(maxZoom, 1)
+			});
+		} else {
+			$(zoomWrapperEl).zoom();
+		}
+	};
+	proto.loadImage = function(imgEl, callback) {
+		var onReady = function() {
+			callback && callback.call(this);
+		};
+		var img = new Image();
+		img.onload = onReady;
+		img.onerror = onReady;
+		img.src = imgEl.getAttribute('data-preview-lazyload');
+	};
+	proto.getRangeByIndex = function(index, length) {
+		return {
+			from: 0,
+			to: length - 1
+		};
+		//		var from = Math.max(index - 1, 0);
+		//		var to = Math.min(index + 1, length);
+		//		if (index === length - 1) {
+		//			from = Math.max(length - 3, 0);
+		//			to = length - 1;
+		//		}
+		//		if (index === 0) {
+		//			from = 0;
+		//			to = Math.min(2, length - 1);
+		//		}
+		//		return {
+		//			from: from,
+		//			to: to
+		//		};
+	};
+
+	proto._getPosition = function(itemData) {
+		var sLeft = itemData.sLeft - window.pageXOffset;
+		var sTop = itemData.sTop - window.pageYOffset;
+		var left = (window.innerWidth - itemData.sWidth) / 2;
+		var top = (window.innerHeight - itemData.sHeight) / 2;
+		return {
+			left: sLeft,
+			top: sTop,
+			x: sLeft - left,
+			y: sTop - top
+		};
+	};
+	proto.refresh = function(index, groupArray) {
+		this.currentGroup = groupArray;
+		//重新生成slider
+		var length = groupArray.length;
+		var itemHtml = [];
+		var currentRange = this.getRangeByIndex(index, length);
+		var from = currentRange.from;
+		var to = currentRange.to + 1;
+		var currentIndex = index;
+		var className = '';
+		var itemStr = '';
+		var wWidth = window.innerWidth;
+		var wHeight = window.innerHeight;
+		for (var i = 0; from < to; from++, i++) {
+			var itemData = groupArray[from];
+			var style = '';
+			if (itemData.sWidth) {
+				style = '-webkit-transform:translate3d(0,0,0) scale(' + itemData.sScale + ');transform:translate3d(0,0,0) scale(' + itemData.sScale + ')';
+			}
+			itemStr = itemTemplate.replace('{{src}}', itemData.src).replace('{{lazyload}}', itemData.lazyload).replace('{{style}}', style);
+			if (from === index) {
+				currentIndex = i;
+				className = $.className('active');
+			} else {
+				className = '';
+			}
+			itemHtml.push(itemStr.replace('{{className}}', className));
+		}
+		this.scroller.innerHTML = itemHtml.join('');
+		this.element.style.display = 'block';
+		this.element.classList.add($.className('preview-in'));
+		this.lastIndex = currentIndex;
+		this.element.offsetHeight;
+		$(this.element).slider().gotoItem(currentIndex, 0);
+		this.indicator && (this.indicator.innerText = (currentIndex + 1) + '/' + this.currentGroup.length);
+		this._loadItem(currentIndex, true);
+	};
+	proto.openByGroup = function(index, group) {
+		index = Math.min(Math.max(0, index), this.groups[group].length - 1);
+		this.refresh(index, this.groups[group]);
+	};
+	proto.open = function(index, group) {
+		if (this.isShown()) {
+			return;
+		}
+		if (typeof index === "number") {
+			group = group || defaultGroupName;
+			this.addImages(group, index); //刷新当前group
+			this.openByGroup(index, group);
+		} else {
+			group = index.getAttribute('data-preview-group');
+			group = group || defaultGroupName;
+			this.addImages(group, index); //刷新当前group
+			this.openByGroup(this.groups[group].indexOf(index.__mui_img_data), group);
+		}
+	};
+	proto.close = function(index, group) {
+		if (!this.isShown()) {
+			return;
+		}
+		this.element.classList.remove($.className('preview-in'));
+		this.element.classList.add($.className('preview-out'));
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (this.lastIndex + 1) + ')'));
+		var imgEl = itemEl.querySelector('img');
+		if (imgEl) {
+			imgEl.classList.add($.className('transitioning'));
+			var itemData = this.currentGroup[this.lastIndex];
+			var posi = this._getPosition(itemData);
+			var sLeft = posi.left;
+			var sTop = posi.top;
+			if (sTop > window.innerHeight || sLeft > window.innerWidth || sTop < 0 || sLeft < 0) { //out viewport
+				imgEl.style.opacity = 0;
+				imgEl.style.webkitTransitionDuration = '0.5s';
+				imgEl.style.webkitTransform = 'scale(' + itemData.sScale + ')';
+			} else {
+				if (this.options.zoom) {
+					$(imgEl.parentNode.parentNode).zoom().toggleZoom(0);
+				}
+				imgEl.style.webkitTransitionDuration = '0.5s';
+				imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
+			}
+		}
+		var zoomers = this.element.querySelectorAll($.classSelector('.zoom-wrapper'));
+		for (var i = 0, len = zoomers.length; i < len; i++) {
+			$(zoomers[i]).zoom().destroy();
+		}
+		$(this.element).slider().destroy();
+//		this.empty();
+	};
+	proto.isShown = function() {
+		return this.element.classList.contains($.className('preview-in'));
+	};
+
+	var previewImageApi = null;
+	$.previewImage = function(options) {
+		if (!previewImageApi) {
+			previewImageApi = new PreviewImage(options);
+		}
+		return previewImageApi;
+	};
+	$.getPreviewImage = function() {
+		return previewImageApi;
+	}
+
+})(mui, window);

+ 322 - 0
js/mui.zoom.js

@@ -0,0 +1,322 @@
+(function($, window) {
+	var CLASS_ZOOM = $.className('zoom');
+	var CLASS_ZOOM_SCROLLER = $.className('zoom-scroller');
+
+	var SELECTOR_ZOOM = '.' + CLASS_ZOOM;
+	var SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER;
+
+	var EVENT_PINCH_START = 'pinchstart';
+	var EVENT_PINCH = 'pinch';
+	var EVENT_PINCH_END = 'pinchend';
+	if ('ongesturestart' in window) {
+		EVENT_PINCH_START = 'gesturestart';
+		EVENT_PINCH = 'gesturechange';
+		EVENT_PINCH_END = 'gestureend';
+	}
+	$.Zoom = function(element, options) {
+		var zoom = this;
+
+		zoom.options = $.extend($.Zoom.defaults, options);
+
+		zoom.wrapper = zoom.element = element;
+		zoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER);
+		zoom.scrollerStyle = zoom.scroller && zoom.scroller.style;
+
+		zoom.zoomer = element.querySelector(SELECTOR_ZOOM);
+		zoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style;
+
+		zoom.init = function() {
+			//自动启用
+			$.options.gestureConfig.pinch = true;
+			$.options.gestureConfig.doubletap = true;
+			zoom.initEvents();
+		};
+
+		zoom.initEvents = function(detach) {
+			var action = detach ? 'removeEventListener' : 'addEventListener';
+			var target = zoom.scroller;
+
+			target[action](EVENT_PINCH_START, zoom.onPinchstart);
+			target[action](EVENT_PINCH, zoom.onPinch);
+			target[action](EVENT_PINCH_END, zoom.onPinchend);
+
+			target[action]($.EVENT_START, zoom.onTouchstart);
+			target[action]($.EVENT_MOVE, zoom.onTouchMove);
+			target[action]($.EVENT_CANCEL, zoom.onTouchEnd);
+			target[action]($.EVENT_END, zoom.onTouchEnd);
+
+			target[action]('drag', zoom.dragEvent);
+			target[action]('doubletap', zoom.doubleTapEvent);
+		};
+		zoom.dragEvent = function(e) {
+			if (imageIsMoved || isGesturing) {
+				e.stopPropagation();
+			}
+		};
+		zoom.doubleTapEvent = function(e) {
+			zoom.toggleZoom(e.detail.center);
+		};
+		zoom.transition = function(style, time) {
+			time = time || 0;
+			style['webkitTransitionDuration'] = time + 'ms';
+			return zoom;
+		};
+		zoom.translate = function(style, x, y) {
+			x = x || 0;
+			y = y || 0;
+			style['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)';
+			return zoom;
+		};
+		zoom.scale = function(style, scale) {
+			scale = scale || 1;
+			style['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')';
+			return zoom;
+		};
+		zoom.scrollerTransition = function(time) {
+			return zoom.transition(zoom.scrollerStyle, time);
+		};
+		zoom.scrollerTransform = function(x, y) {
+			return zoom.translate(zoom.scrollerStyle, x, y);
+		};
+		zoom.zoomerTransition = function(time) {
+			return zoom.transition(zoom.zoomerStyle, time);
+		};
+		zoom.zoomerTransform = function(scale) {
+			return zoom.scale(zoom.zoomerStyle, scale);
+		};
+
+		// Gestures
+		var scale = 1,
+			currentScale = 1,
+			isScaling = false,
+			isGesturing = false;
+		zoom.onPinchstart = function(e) {
+			isGesturing = true;
+		};
+		zoom.onPinch = function(e) {
+			if (!isScaling) {
+				zoom.zoomerTransition(0);
+				isScaling = true;
+			}
+			scale = (e.detail ? e.detail.scale : e.scale) * currentScale;
+			if (scale > zoom.options.maxZoom) {
+				scale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5);
+			}
+			if (scale < zoom.options.minZoom) {
+				scale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5);
+			}
+			zoom.zoomerTransform(scale);
+		};
+		zoom.onPinchend = function(e) {
+			scale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom);
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
+			currentScale = scale;
+			isScaling = false;
+		};
+		zoom.setZoom = function(newScale) {
+			scale = currentScale = newScale;
+			zoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0);
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
+		};
+		zoom.toggleZoom = function(position, speed) {
+			if (typeof position === 'number') {
+				speed = position;
+				position = undefined;
+			}
+			speed = typeof speed === 'undefined' ? zoom.options.speed : speed;
+			if (scale && scale !== 1) {
+				scale = currentScale = 1;
+				zoom.scrollerTransition(speed).scrollerTransform(0, 0);
+			} else {
+				scale = currentScale = zoom.options.maxZoom;
+				if (position) {
+					var offset = $.offset(zoom.zoomer);
+					var top = offset.top;
+					var left = offset.left;
+					var offsetX = (position.x - left) * scale;
+					var offsetY = (position.y - top) * scale;
+					this._cal();
+					if (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
+					} else if (offsetX < imageMaxX) { //left
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
+					} else if (offsetX > (imageMaxX + wrapperWidth)) { //right
+						offsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2;
+					}
+					if (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
+					} else if (offsetY < imageMaxY) { //top
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
+					} else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom
+						offsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2;
+					}
+					offsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX);
+					offsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY);
+					zoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY);
+				} else {
+					zoom.scrollerTransition(speed).scrollerTransform(0, 0);
+				}
+			}
+			zoom.zoomerTransition(speed).zoomerTransform(scale);
+		};
+
+		zoom._cal = function() {
+			wrapperWidth = zoom.wrapper.offsetWidth;
+			wrapperHeight = zoom.wrapper.offsetHeight;
+			imageWidth = zoom.zoomer.offsetWidth;
+			imageHeight = zoom.zoomer.offsetHeight;
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+		};
+
+		var wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {},
+			imageTouchesCurrent = {},
+			imageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY;
+
+		zoom.onTouchstart = function(e) {
+			e.preventDefault();
+			imageIsTouched = true;
+			imageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX;
+			imageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY;
+		};
+		zoom.onTouchMove = function(e) {
+			e.preventDefault();
+			if (!imageIsTouched) return;
+			if (!imageIsMoved) {
+				wrapperWidth = zoom.wrapper.offsetWidth;
+				wrapperHeight = zoom.wrapper.offsetHeight;
+				imageWidth = zoom.zoomer.offsetWidth;
+				imageHeight = zoom.zoomer.offsetHeight;
+				var translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform'));
+				imageStartX = translate.x || 0;
+				imageStartY = translate.y || 0;
+				zoom.scrollerTransition(0);
+			}
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+
+			if (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return;
+
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+
+			imageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX;
+			imageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY;
+
+			if (!imageIsMoved && !isScaling) {
+				//				if (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) {
+				//TODO 此处需要优化,当遇到长图,需要上下滚动时,下列判断会导致滚动不流畅
+				if (
+					(Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) ||
+					(Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x)
+				) {
+					imageIsTouched = false;
+					return;
+				}
+				//				}
+			}
+			imageIsMoved = true;
+			imageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX;
+			imageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY;
+
+			if (imageCurrentX < imageMinX) {
+				imageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8);
+			}
+			if (imageCurrentX > imageMaxX) {
+				imageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8);
+			}
+
+			if (imageCurrentY < imageMinY) {
+				imageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8);
+			}
+			if (imageCurrentY > imageMaxY) {
+				imageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8);
+			}
+
+			//Velocity
+			if (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x;
+			if (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y;
+			if (!velocityPrevTime) velocityPrevTime = $.now();
+			velocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2;
+			velocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2;
+			if (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0;
+			if (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0;
+			velocityPrevPositionX = imageTouchesCurrent.x;
+			velocityPrevPositionY = imageTouchesCurrent.y;
+			velocityPrevTime = $.now();
+
+			zoom.scrollerTransform(imageCurrentX, imageCurrentY);
+		};
+		zoom.onTouchEnd = function(e) {
+			if (!e.touches.length) {
+				isGesturing = false;
+			}
+			if (!imageIsTouched || !imageIsMoved) {
+				imageIsTouched = false;
+				imageIsMoved = false;
+				return;
+			}
+			imageIsTouched = false;
+			imageIsMoved = false;
+			var momentumDurationX = 300;
+			var momentumDurationY = 300;
+			var momentumDistanceX = velocityX * momentumDurationX;
+			var newPositionX = imageCurrentX + momentumDistanceX;
+			var momentumDistanceY = velocityY * momentumDurationY;
+			var newPositionY = imageCurrentY + momentumDistanceY;
+
+			if (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX);
+			if (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY);
+			var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
+
+			imageCurrentX = newPositionX;
+			imageCurrentY = newPositionY;
+
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+			imageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX);
+			imageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY);
+
+			zoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY);
+		};
+		zoom.destroy = function() {
+			zoom.initEvents(true); //detach
+			delete $.data[zoom.wrapper.getAttribute('data-zoomer')];
+			zoom.wrapper.setAttribute('data-zoomer', '');
+		}
+		zoom.init();
+		return zoom;
+	};
+	$.Zoom.defaults = {
+		speed: 300,
+		maxZoom: 3,
+		minZoom: 1,
+	};
+	$.fn.zoom = function(options) {
+		var zoomApis = [];
+		this.each(function() {
+			var zoomApi = null;
+			var self = this;
+			var id = self.getAttribute('data-zoomer');
+			if (!id) {
+				id = ++$.uuid;
+				$.data[id] = zoomApi = new $.Zoom(self, options);
+				self.setAttribute('data-zoomer', id);
+			} else {
+				zoomApi = $.data[id];
+			}
+			zoomApis.push(zoomApi);
+		});
+		return zoomApis.length === 1 ? zoomApis[0] : zoomApis;
+	};
+})(mui, window);

+ 42 - 26
js/util.js

@@ -121,6 +121,7 @@ mui.plusReady(function() {
 				columnId: ENVIRONMENT[SYSTEM_ENVIRONMENT].myMarksColumnId,
 				states: "0,1",
 				searchColumnName: "title",
+				userIdColumnName: "c_editorid",
 				orderColumnName: "create_time",
 				orderByType: 2,
 				taskStatusTag: {
@@ -301,7 +302,7 @@ mui.plusReady(function() {
 				} else if (pageName === "myMarks") {
 					localStorage.setItem("mapTitle", "我的标记");
 				}
-				mui.openWindow("map.html", "customMarking")
+				mui.openWindow("map.html", "toMapPage")
 			}).on('tap', '.toMyTask', function() {
 				// 我的任务页面跳转
 				clearSearchValue();
@@ -412,7 +413,6 @@ mui.plusReady(function() {
 				let taskName = this.dataset.taskName;
 				if (myTaskListStateFalse[taskId]) {
 					let myTaskListStateFalseItem = myTaskListStateFalse[taskId];
-					console.log("myTaskListStateFalseItem",JSON.stringify(myTaskListStateFalseItem))
 					let columnId = Number(myTaskListStateFalseItem.column_id);
 					// let modelId = Number(myTaskListStateFalseItem.model_id);
 					let paramData2 = new FormData();
@@ -487,13 +487,15 @@ mui.plusReady(function() {
 				console.log("utils.toBackPage")
 				mui.back();
 			}).on('tap', '.changeMap', function() {
-				console.log("切换底图")
 				try {
 					changeMap();
 				} catch (e) {
 					//TODO handle the exception
 					console.log("changeMap catch")
 				}
+			}).on('tap', '.getLocalAddr', function() {
+				getLocalAddr();
+				getLocalAddrGoTo();
 			}).on('tap', '.detailedInformation', function() {
 				console.log("疑点详细信息", this.dataset.markerData);
 				try {
@@ -543,9 +545,19 @@ mui.plusReady(function() {
 					myMarkerData.c_content = c_content;
 				} else if (myMarkerData.c_doubtful_points) {
 					let c_doubtful_points = JSON.parse(myMarkerData.c_doubtful_points);
-					c_doubtful_points.properties.desc = document.getElementById("mapTextArea").value;
-					c_doubtful_points.properties.state = 1;
-					c_doubtful_points.properties.fileList = fileList_;
+					if (!c_doubtful_points.properties) {
+						c_doubtful_points.properties = {
+							desc: document.getElementById("mapTextArea").value,
+							state: 1,
+							fileList: fileList_
+						}
+					} else {
+						c_doubtful_points.properties['desc'] = document.getElementById("mapTextArea")
+							.value;
+						c_doubtful_points.properties['state'] = 1;
+						c_doubtful_points.properties['fileList'] = fileList_;
+					}
+
 					myMarkerData.c_doubtful_points = c_doubtful_points;
 				} else {
 					mui.alert('空间信息获取失败,请检查代码后重试!', '系统异常')
@@ -582,12 +594,13 @@ mui.plusReady(function() {
 					if (resData.code == 200) {
 						document.getElementById('mapBottomBox').style.bottom = "-100%";
 						mui.toast('提交成功');
-						sessionStorage.clear();
 						updateAuditState({
 							data: paramData2
 						}, function(res) {
 							let resData = res;
 							if (resData.code == 200) {
+								document.activeElement.blur(); // 收起模拟键盘
+								event.preventDefault(); // 阻止页面刷新
 								window.history.back();
 							}
 						}, function(e) {
@@ -1022,7 +1035,7 @@ mui.plusReady(function() {
 		// 请求我的任务列表(下一页)
 		function getMoveMyTaskList() {
 			page_e = this;
-			getMyTaskList();
+			getMyTaskList(false);
 		}
 		// 清空搜索框值
 		function clearSearchValue() {
@@ -1046,12 +1059,12 @@ mui.plusReady(function() {
 				}
 			}
 			// 重新请求数据
-			getMyTaskList();
+			getMyTaskList(true);
 			mui('#listMoveDom').pullRefresh().refresh(true);
 		};
-		// 请求我的任务列表
-		function getMyTaskList() {
-			sessionStorage.clear();
+		// 请求我的任务列表,state:是否重新加载 ?清空缓存,重新加载 : 加载下一页数据并添加数据到缓存
+		function getMyTaskList(state) {
+
 			// 创建formData对象
 			let paramData = new FormData();
 			let pageName = document.getElementById('pageName') ? document.getElementById('pageName').value :
@@ -1112,16 +1125,16 @@ mui.plusReady(function() {
 				};
 				searchParam.push(paramItem);
 			}
-			// if(pageParam[pageName].userIdColumnName){
-			// 	let param = {
-			// 	  field: pageParam[pageName].userIdColumnName,
-			// 	  searchType: "1",
-			// 	  content: {
-			// 	    value: localStorage.getItem("USER_ID")
-			// 	  }
-			// 	};
-			// 	searchParam.push(param);
-			// }
+			if (pageParam[pageName].userIdColumnName) {
+				let param = {
+					field: pageParam[pageName].userIdColumnName,
+					searchType: "1",
+					content: {
+						value: localStorage.getItem("userId")
+					}
+				};
+				searchParam.push(param);
+			}
 
 			if (pageParam[pageName].searchStateColumnName && searchStateValue !== 0) {
 				let paramItem = {
@@ -1149,12 +1162,18 @@ mui.plusReady(function() {
 				let resJson = {};
 				try {
 					let serverDataMap = {};
+					let geometrys = [];
+					// 如果不是重新加载而是下一页
+					if (!state && page != 0) {
+						serverDataMap = JSON.parse(localStorage.getItem("serverDataMap"));
+						geometrys = JSON.parse(localStorage.getItem("geometrys"));
+					}
+
 					if (typeof res === "object") {
 						resJson = res;
 					} else {
 						resJson = res;
 					}
-					console.log(JSON.stringify(resJson))
 					if (resJson.code == 200 && resJson.content != null && resJson.content.data &&
 						resJson.content.data
 						.length > 0) {
@@ -1163,13 +1182,11 @@ mui.plusReady(function() {
 							.getElementById(
 								'myTaskListDom') :
 							document.getElementById('lawsAndRegulationsListDom');
-						let geometrys = [];
 						for (let i = 0; i < resJson.content.data.length; i++) {
 							let moveDom = document.createElement('div');
 							let createTime = new Date(resJson.content.data[i].create_time);
 							let updateTime = new Date(resJson.content.data[i].update_time);
 							if (pageName === 'myTask') {
-								console.log(JSON.stringify(resJson.content.data[i]))
 								if (resJson.content.data[i].state == 0) {
 									myTaskListStateFalse[resJson.content.data[i].c_task_id] = resJson
 										.content.data[i];
@@ -1189,7 +1206,6 @@ mui.plusReady(function() {
 
 								let cDoubtfulPoints = JSON.parse(resJson.content.data[i]
 									.c_doubtful_points);
-								console.log(JSON.stringify(cDoubtfulPoints),JSON.stringify(resJson.content.data[i]))
 								cDoubtfulPoints.dataTitle = cDoubtfulPoints.name ? cDoubtfulPoints
 									.name :
 									cDoubtfulPoints.id;

+ 2 - 0
pages/home.html

@@ -7,6 +7,8 @@
 		<meta name="apple-mobile-web-app-capable" content="yes">
 		<meta name="apple-mobile-web-app-status-bar-style" content="black">
 		<script src="../js/mui.js"></script>
+		<script src="../js/mui.zoom.js"></script>
+		<script src="../js/mui.previewimage.js"></script>
 		<!--标准mui.css-->
 		<link rel="stylesheet" href="../css/mui.min.css">
 		<script src="../js/mui.picker.js"></script>

+ 38 - 15
pages/map.html

@@ -8,6 +8,8 @@
 		<meta name="apple-mobile-web-app-status-bar-style" content="black">
 		<script src="../js/imageConversion.js"></script>
 		<script src="../js/mui.js"></script>
+		<script src="../js/mui.zoom.js"></script>
+		<script src="../js/mui.previewimage.js"></script>
 		<script src="../js/util.js"></script>
 		<link rel="stylesheet" href="../js/leaflet1.3.1/leaflet.css">
 		<link rel="stylesheet" href="../js/leaflet1.3.1/leaflet.label.css">
@@ -79,9 +81,15 @@
 			<div class="changeType" id="addMyMarker">
 				<span class="mui-icon mui-icon-upload"></span>
 			</div>
-			<!-- 切换底图按钮 -->
-			<div class="changeType2 changeMap">
-				<span class="mui-icon mui-icon-map"></span>
+			<div class="changeType2">
+				<!-- 切换底图按钮 -->
+				<div class="changeMap">
+					<span class="mui-icon mui-icon-map"></span>
+				</div>
+				<!-- 当前定位刷新 -->
+				<div class="getLocalAddr">
+					<span class="mui-icon mui-icon-location"></span>
+				</div>
 			</div>
 		</div>
 	</body>
@@ -172,8 +180,8 @@
 		//定义一些常量
 		let center_ = [31.17361258762417, 121.51803731918336];
 
-		const skew = [0.00011, 0.19195];
-		// const skew = [-0.002,0.198];
+		const GoToSkew = [0.00011, 0.19195];
+		const skew = [-0.0026, 0.196];
 
 		function getOneLatLng(data, returnFunc) {
 			if (typeof data[0] == "object") {
@@ -336,7 +344,7 @@
 				subdomains: "123",
 				zoom: 3
 			});
-			
+
 		layer.addTo(map);
 
 		function changeMap() {
@@ -350,9 +358,10 @@
 				map.removeControl(other);
 				layer.addTo(map);
 				console.log("切换为layer")
-				
+
 			}
 		}
+		let LMarker = "";
 		if (localStorage.getItem("user_latitude") != null && localStorage.getItem("user_longitude") != null) {
 			let myIcon = L.icon({
 				iconUrl: '../js/leaflet1.3.1/images/myMarker00000000.png',
@@ -363,13 +372,20 @@
 				shadowSize: [41, 41],
 				className: "my-div-icon2"
 			})
-			let localAddr = [parseFloat(localStorage.getItem("user_latitude")), parseFloat(localStorage
-				.getItem(
-					"user_longitude"))];
-			L.marker(localAddr, {
+			let localAddr = [parseFloat(localStorage.getItem("user_latitude")), parseFloat(localStorage.getItem("user_longitude"))];
+			LMarker = L.marker(localAddr, {
 				icon: myIcon
-			}).addTo(map);
+			});
+			LMarker.addTo(map);
+		}
+
+		function getLocalAddrGoTo() {
+			LMarker.setLatLng(L.latLng(parseFloat(localStorage.getItem("user_latitude")), parseFloat(localStorage.getItem("user_longitude"))));
+			center_ = [parseFloat(localStorage.getItem("user_latitude")), parseFloat(localStorage.getItem(
+				"user_longitude"))];
+			map.panTo(center_);
 		}
+
 		// 批量将markers中的点添加到地图中,并添加监听事件打开底部弹窗。
 		markers.forEach(item => {
 			item.on('click', function(item) {
@@ -441,7 +457,7 @@
 						<p class="detailedInformation" data-marker-data='${markerDataPropertiesStr}'>详细信息</p>
 						<div class="arrowdown" data-state="${state}"><span class="mui-icon mui-icon-arrowdown"></span></div>
 						<p>疑点图斑:</p>
-						${markerData.uploadFileUrls ? `<div><img class="patternSpot" src="https://117.131.26.69:10081/proxy_dms${markerData.uploadFileUrls}"/></div>` : `<p>暂无</p>`}
+						${markerData.uploadFileUrls ? `<div><img id="patternSpot" class="patternSpot" src="https://117.131.26.69:10081/proxy_dms${markerData.uploadFileUrls}" data-preview-src="" data-preview-group="1"/></div>` : `<p>暂无</p>`}
 						<p>位置:${markerData.properties && markerData.properties['镇域名称'] ? markerData.properties['镇域名称'] : '未知'}</p>
 						<div id="mapImageList">
 							`;
@@ -466,7 +482,7 @@
 										</div>
 										${state == 0 ? `
 										<div class="displayFlex3">
-											<div class="paperplaneMyMarker2 openMyPhoneMap" data-lat="${item.latlng.lat}" data-lng="${item.latlng.lng}">导航到这</div>
+											<div class="paperplaneMyMarker2 openMyPhoneMap" data-lat="${item.latlng.lat - skew[0] + GoToSkew[0]}" data-lng="${item.latlng.lng - skew[1] + GoToSkew[1]}">导航到这</div>
 											<div class="paperplane"><span class="mui-icon mui-icon-paperplane"></span>提交</div>
 										</div>
 										` : ``}`;
@@ -489,7 +505,7 @@
 									</div>
 									${state == 0 ? `
 									<div class="displayFlex3">
-										<div class="paperplaneMyMarker2 openMyPhoneMap" data-lat="${item.latlng.lat}" data-lng="${item.latlng.lng}">导航到这</div>
+										<div class="paperplaneMyMarker2 openMyPhoneMap" data-lat="${item.latlng.lat - skew[0] + GoToSkew[0]}" data-lng="${item.latlng.lng - skew[1] + GoToSkew[1]}">导航到这</div>
 										<div class="paperplane"><span class="mui-icon mui-icon-paperplane"></span>提交</div>
 									</div>
 									` : ``}`;
@@ -497,6 +513,13 @@
 							mapBottomBoxInnerHtml;
 						document.getElementById('mapBottomBox').style.bottom = "0";
 					}
+					window.onload=function() {
+						setTimeout(()=>{
+							console.log("疑点图斑预览");
+							mui.previewImage();	
+						},1000);
+						
+					}
 				}
 			})
 			if (item.options.data.name || item.options.data.properties.title || item.options.data