{"version":3,"file":"fd-base-mobile.min.js","sources":["fd-base-mobile.js"],"sourcesContent":["/**\r\n * familydoctor.com.cn base js for mobile\r\n * Author: deiphi@qq.com\r\n */\r\n\r\nif (window.FD) {\r\n throw new Error(\"FD对象已存在\");\r\n}\r\n\r\nvar FD = {\r\n /**\r\n * 弹出一个可自动关闭的提示信息\r\n * @param {string} msg 信息内容\r\n * @param {function} callback 回调函数\r\n * @param {sec} sec 自动关闭的时间,以秒为单位\r\n * @return {object} 返回一个FD.Echo实例\r\n eg\r\n FD.showToast(\"Hello world\");\r\n */\r\n showToast: function(msg, callback, sec) {\r\n callback = callback || function() {};\r\n sec = sec || 5;\r\n\r\n return new FD.Echo({\r\n content: msg || \"Hi\",\r\n sec: sec,\r\n autoClose: true,\r\n onClosed: callback\r\n });\r\n },\r\n\r\n /**\r\n * 弹出一个Loading\r\n * @param {function} callback 回调函数\r\n * @param {string} msg 提示信息,选填\r\n * @param {string} src 动画的gif地址,选填\r\n * @return {object} 返回一个FD.Echo实例\r\n eg\r\n FD.showWaiting(function(dialog) {\r\n setTimeout(function() {\r\n dialog.close();\r\n }, 3000);\r\n });\r\n eg\r\n var dialog = FD.showWaiting();\r\n setTimeout(function() {\r\n dialog.close();\r\n }, 3000);\r\n */\r\n showWaiting: function(callback, msg, src) {\r\n callback = callback || function() {};\r\n msg = msg || \"\";\r\n src = src || \"//img.familydoctor.com.cn/component/common/styles/images/loading.gif\";\r\n\r\n return new FD.Echo({\r\n content: '

' + msg + '

',\r\n onOpened: callback\r\n });\r\n },\r\n\r\n /**\r\n * 类似原生的confirm\r\n * @param {object} options 配置参数\r\n * @param {string} msg 信息内容\r\n * @param {string} summary 摘要描述\r\n * @param {function} onSubmit 点击确定回调\r\n * @param {function} onCancel 点击取消回调\r\n * @param {boolean} showCancel 是否显示取消按钮\r\n * @param {array} btnText 两个按钮的文字,这里是一个数组\r\n * @return {object} 返回一个FD.Dialog实例\r\n eg\r\n FD.showConfirm({\r\n msg: \"确定要删除吗?\",\r\n onSubmit: function(){ console.log(\"confirm\"); },\r\n onCancel: function(){ console.log(\"cancel\"); }\r\n });\r\n */\r\n showConfirm: function(options) {\r\n var defaults = {\r\n msg: \"提示\",\r\n summary: \"\",\r\n btnText: [\"确定\", \"取消\"],\r\n showTitle: false,\r\n showClose: false,\r\n dialogClassName: \"\",\r\n className: \"\",\r\n content: \"\",\r\n onSubmit: function() {},\r\n onCancel: function() {},\r\n showCancel: true\r\n };\r\n\r\n defaults = FD.extend(defaults, options || {});\r\n\r\n var btns = [];\r\n var summary = '';\r\n\r\n if (defaults.summary) {\r\n summary += '
';\r\n summary += defaults.summary;\r\n summary += '
';\r\n }\r\n\r\n if (defaults.showCancel) {\r\n btns.push('');\r\n btns.push('');\r\n } else {\r\n btns.push('');\r\n }\r\n\r\n var content = defaults.content || '

' + defaults.msg + '

' + summary + '
';\r\n\r\n var dialog = new FD.Dialog({\r\n width: 300,\r\n showTitle: defaults.showTitle,\r\n showClose: defaults.showClose,\r\n className: \"fd-dia-confirm \" + defaults.className,\r\n dialogClassName: defaults.dialogClassName,\r\n content: content + '
' + btns.join('') + '
',\r\n onOpened: function(wrap) {\r\n var $primary = wrap.box.querySelector(\".js-btn-ok\");\r\n var $cancel = wrap.box.querySelector(\".js-btn-cancel\");\r\n\r\n //确定\r\n $primary.onclick = function() {\r\n dialog.close();\r\n defaults.onSubmit();\r\n };\r\n\r\n if ($cancel) {\r\n //取消\r\n $cancel.onclick = function() {\r\n dialog.close();\r\n defaults.onCancel();\r\n };\r\n }\r\n }\r\n });\r\n\r\n return dialog;\r\n },\r\n\r\n dom: {\r\n ready: (function() {\r\n var isReady = false;\r\n var callbacks = [];\r\n\r\n var ready = function() {\r\n if (!isReady) {\r\n isReady = true;\r\n\r\n callbacks.forEach(function(fn) {\r\n fn();\r\n });\r\n }\r\n };\r\n\r\n var completed = function() {\r\n document.removeEventListener(\"DOMContentLoaded\", completed);\r\n window.removeEventListener(\"load\", completed);\r\n ready();\r\n };\r\n\r\n return function(callback) {\r\n if (isReady) {\r\n return callback();\r\n } else {\r\n callbacks.push(callback);\r\n }\r\n\r\n if (document.readyState === \"complete\" || (document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\r\n setTimeout(ready);\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", completed);\r\n window.addEventListener(\"load\", completed);\r\n }\r\n };\r\n })(),\r\n\r\n /**\r\n * 获取一个dom节点\r\n * @param {string} selector 选择符\r\n * @return {DOM Node} DOM节点\r\n * eg\r\n FD.dom.get(\"body\");\r\n */\r\n get: function(selector) {\r\n if (!selector) {\r\n return null;\r\n }\r\n return document.querySelector(selector);\r\n },\r\n\r\n /**\r\n * 获取多个dom节点\r\n * @param {string} selector 选择符\r\n * @return {DOM NodeList} DOM节点list\r\n * eg\r\n FD.dom.getAll(\"h2\");\r\n */\r\n getAll: function(selector) {\r\n if (!selector) {\r\n return null;\r\n }\r\n return document.querySelectorAll(selector);\r\n },\r\n\r\n /**\r\n * 插入dom节点(在父节点内,后插)\r\n * @param {DOM Node} parentNode 父节点\r\n * @param {DOM Node || string} newNode 将要插入的DOM节点或字符串\r\n * @return {DOM Node} 父节点\r\n * eg\r\n FD.dom.append(document.body, \"
hello
\");\r\n */\r\n append: function(parentNode, newNode) {\r\n if (!parentNode || !newNode) {\r\n return;\r\n }\r\n\r\n if (typeof newNode === \"object\") {\r\n parentNode.appendChild(newNode);\r\n return parentNode;\r\n }\r\n\r\n var fragment = document.createDocumentFragment();\r\n var div = document.createElement(\"div\");\r\n\r\n div.innerHTML = newNode.toString();\r\n\r\n while (div.childNodes[0]) {\r\n fragment.appendChild(div.childNodes[0]);\r\n }\r\n\r\n parentNode.appendChild(fragment);\r\n div = null;\r\n return parentNode;\r\n },\r\n\r\n /**\r\n * 插入dom节点(在父节点内,前插)\r\n * @param {DOM Node} parentNode 父节点\r\n * @param {DOM Node || string} newNode 将要插入的DOM节点或字符串\r\n * @return {DOM Node} 父节点\r\n * eg\r\n FD.dom.prepend(document.body, \"
hello
\");\r\n */\r\n prepend: function(parentNode, newNode) {\r\n if (!parentNode || !newNode) {\r\n return;\r\n }\r\n var hasSiblings = parentNode.childNodes.length > 0 ? false : true;\r\n\r\n if (typeof newNode === \"object\") {\r\n hasSiblings ? parentNode.appendChild(newNode) : parentNode.insertBefore(newNode, parentNode.childNodes[0]);\r\n return parentNode;\r\n }\r\n\r\n if (hasSiblings) {\r\n FD.dom.append(parentNode, newNode);\r\n } else {\r\n var temp = document.createDocumentFragment();\r\n parentNode.insertBefore(FD.dom.append(temp, newNode), parentNode.childNodes[0]);\r\n temp = null;\r\n return parentNode;\r\n }\r\n },\r\n\r\n /**\r\n * 插入dom节点(在父节点外,前插)\r\n * @param {DOM Node} parentNode 父节点\r\n * @param {DOM Node || string} newNode 将要插入的DOM节点或字符串\r\n * @return {DOM Node} 父节点\r\n * eg\r\n FD.dom.before(DOM.getAll(\"div\")[0], \"
hello
\");\r\n */\r\n before: function(parentNode, newNode) {\r\n if (!parentNode || !newNode) {\r\n return;\r\n }\r\n var temp = document.createDocumentFragment();\r\n\r\n parentNode.parentNode.insertBefore(FD.dom.append(temp, newNode), parentNode);\r\n temp = null;\r\n return parentNode;\r\n },\r\n\r\n /**\r\n * 插入dom节点(在父节点外,后插)\r\n * @param {DOM Node} parentNode 父节点\r\n * @param {DOM Node || string} newNode 将要插入的DOM节点或字符串\r\n * @return {DOM Node} 父节点\r\n * eg\r\n FD.dom.after(DOM.getAll(\"div\")[0], \"
hello
\");\r\n */\r\n after: function(parentNode, newNode) {\r\n if (!parentNode || !newNode) {\r\n return;\r\n }\r\n var temp = document.createDocumentFragment();\r\n\r\n if (parentNode.nextSibling) {\r\n parentNode.parentNode.insertBefore(FD.dom.append(temp, newNode), parentNode.nextSibling);\r\n } else {\r\n FD.dom.append(parentNode.parentNode, FD.dom.append(temp, newNode));\r\n }\r\n temp = null;\r\n return parentNode;\r\n },\r\n\r\n /**\r\n * 触发事件\r\n * @param {Event Type} type 事件类型\r\n * @param {DOM Node} target 将要触发事件的DOM节点\r\n * @return null\r\n * eg\r\n FD.dom.trigger(\"click\", document.body);\r\n */\r\n trigger: function(type, target) {\r\n target = typeof target === \"object\" ? target : document.querySelector(target);\r\n target.dispatchEvent(new CustomEvent(type));\r\n },\r\n\r\n /**\r\n * 给DOM节点绑定事件(相当于jquery的on方法)\r\n * @param {string} type 事件名称\r\n * @param {string || NodeList || Element} selector 选择符/节点集合/单节点\r\n * @param {function} callback 回调函数\r\n * @return null\r\n * eg\r\n FD.dom.on(\"click\", \".mui-content li\", function(){\r\n console.log(\"click ok\");\r\n });\r\n */\r\n on: function(type, selector, callback) {\r\n var targets = [];\r\n\r\n if (!callback || typeof callback !== \"function\") {\r\n return;\r\n }\r\n\r\n if (typeof selector === \"string\") {\r\n document.addEventListener(type, function(e) {\r\n targets = [].slice.call(document.querySelectorAll(selector));\r\n findTarget(this, e, e.target, callback);\r\n });\r\n } else if (typeof selector === \"object\") {\r\n if (selector.length) {\r\n targets = [].slice.call(selector);\r\n } else if (selector.nodeType === 1) {\r\n targets.push(selector);\r\n }\r\n\r\n document.addEventListener(type, function(e) {\r\n findTarget(this, e, e.target, callback);\r\n });\r\n }\r\n\r\n hackIOS();\r\n\r\n function findTarget(obj, e, target, callback) {\r\n if (obj === target) {\r\n return;\r\n } //obj === document\r\n\r\n var flag = targets.some(function(item) {\r\n return target === item;\r\n });\r\n\r\n if (flag) {\r\n callback.call(target, e);\r\n } else if (target.parentNode) {\r\n findTarget(obj, e, target.parentNode, callback);\r\n }\r\n }\r\n\r\n //fixed ios safari click事件无法冒泡的bug\r\n function hackIOS() {\r\n if (FD.isIOS()) {\r\n FD.dom.ready(function() {\r\n document.body.style.cursor = \"pointer\";\r\n document.body.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\";\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n util: {\r\n /**\r\n * 判断是否是整数 \r\n * @param {string || number} str 字符串或数字\r\n * @return {boolean}\r\n * eg\r\n FD.util.isInt(3.14);\r\n */\r\n isInt: function(str) {\r\n return /^-?\\d+$/.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是数字(整数或浮点数)\r\n * @param {string || number} str 字符串或数字\r\n * @return {boolean}\r\n * eg\r\n FD.util.isNumber(3.14);\r\n */\r\n isNumber: function(str) {\r\n return /^(-?\\d+)(\\.\\d+)?$/i.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是手机(只做简单判断,以1开头后面是10位的数字)\r\n * @param {string || number} str 字符串或数字\r\n * @return {boolean}\r\n * eg\r\n FD.util.isMobile(13800138000);\r\n */\r\n isMobile: function(str) {\r\n return /^1\\d{10}$/.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是身份证号码\r\n * @param {string || number} str 字符串或数字\r\n * @return {boolean}\r\n * eg\r\n FD.util.isIdCard(123456789012345);\r\n */\r\n isIdCard: function(str) {\r\n return /(^\\d{15}$)|(^\\d{17}([0-9]|X)$)/i.test(str);\r\n },\r\n\r\n /**\r\n * 判断email\r\n * @param {string} str email地址\r\n * @return {boolean}\r\n * eg\r\n FD.util.isEmail(\"abc@gmail.com\");\r\n */\r\n isEmail: function(str) {\r\n var myReg = /^[-_A-Za-z0-9\\.]+@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$/;\r\n if (myReg.test(str)) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * 为手机号做掩码\r\n * @param {string || number} str 字符串或数字\r\n * @return {string}\r\n * eg\r\n FD.util.maskMobile(13800138000); //返回:138******00\r\n */\r\n maskMobile: function(mobile) {\r\n if (!mobile) {\r\n return '';\r\n }\r\n if (mobile.length !== 11) {\r\n return mobile;\r\n }\r\n mobile = mobile.substring(0, 3) + \"******\" + mobile.substring(9);\r\n return mobile;\r\n },\r\n\r\n /**\r\n * 数组去重\r\n * @param {Array} arr 原数组\r\n * @return {Array} 去重后的数组\r\n * eg\r\n var arr = [1, \"1\", 1, \"1\", \"a\", \"a\", \"b\"];\r\n FD.util.unique(arr); // 返回:[1, \"1\", \"a\", \"b\"]\r\n */\r\n unique: function(arr) {\r\n var r = [];\r\n\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n for (var j = i + 1; j < l; j++) {\r\n if (arr[i] === arr[j]) {\r\n j = ++i;\r\n }\r\n }\r\n\r\n r.push(arr[i]);\r\n }\r\n\r\n return r;\r\n },\r\n\r\n /**\r\n * 获取url参数\r\n * @param {string} url 链接地址 \r\n * @param {string} name key\r\n * @return {string} value\r\n * eg\r\n var val = FD.util.getQueryString(location.href, \"id\");\r\n */\r\n getQueryString: function (url, name) {\r\n var reg = new RegExp('(^|\\\\?|&)' + name + '=([^&]*)(\\\\s|&|$)', 'i');\r\n var match = url.match(reg);\r\n if (match) {\r\n return decodeURIComponent(match[2].replace(/\\+/g, ' '));\r\n }\r\n return '';\r\n },\r\n\r\n /**\r\n * 格式化参数\r\n * @param {object} data 参数对象\r\n * @param {boolean} noCache 是否缓存(如果不缓存将会增加一个随机参数)\r\n * @return {string} queryString\r\n * eg\r\n FD.util.formatParams({name: \"tom\", age: 25});\r\n */\r\n formatParams: function(data, noCache) {\r\n var arr = [];\r\n\r\n if (noCache === void 0) {\r\n noCache = false;\r\n }\r\n\r\n for (var name in data) {\r\n arr.push(encodeURIComponent(name) + \"=\" + encodeURIComponent(data[name]));\r\n }\r\n\r\n noCache && arr.push(\"_random_=\" + new Date().getTime());\r\n\r\n return arr.join(\"&\");\r\n },\r\n\r\n parseQueryString: function(str) {\r\n if (!str || !str.trim()) {\r\n return null;\r\n }\r\n\r\n var obj = {};\r\n var arr = str.split('#')[0].split('?');\r\n\r\n if (arr.length < 2) {\r\n if (arr[0].indexOf('&') !== -1 || arr[0].indexOf('=') !== -1) {\r\n str = arr[0];\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n str = arr[1];\r\n }\r\n\r\n arr = str ? str.split('&') : [];\r\n\r\n for (var i = 0; i < arr.length; i++) {\r\n var pair = arr[i].split('=');\r\n\r\n obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]) || '';\r\n }\r\n\r\n return obj;\r\n },\r\n\r\n /**\r\n * 把文本内容转换成html\r\n * @param {string} str 要转换的字符串,通常是从textarea控件获取得到\r\n * @return {string} 格式化好的html字符串\r\n */\r\n htmlEncode: function(str) {\r\n str = str.replace(/\\r\\n/g, \"
\");\r\n str = str.replace(/\\n/g, \"
\");\r\n str = str.replace(/\\r/g, \"
\");\r\n str = str.replace(/\\s/g, \" \");\r\n return str;\r\n },\r\n\r\n /**\r\n * 获取一个随机数\r\n * @param {number} n 最小值\r\n * @param {number} m 最大值\r\n * @return {number} 随机数\r\n */\r\n getRandom: function(n, m) {\r\n if (m === undefined) {\r\n m = n;\r\n n = 0;\r\n }\r\n\r\n return Math.round(Math.random() * (m - n) + n);\r\n },\r\n\r\n /**\r\n * 判断微信浏览器\r\n */\r\n isWeiXin: function() {\r\n var ua = navigator.userAgent.toLowerCase();\r\n\r\n return ua.indexOf('micromessenger') !== -1;\r\n }\r\n },\r\n\r\n /**\r\n * Ajax方法,类似jQuery的ajax\r\n * @param {object} options 参数\r\n * @return null\r\n * eg\r\n FD.ajax({\r\n url: \"http://api.familydoctor.com.cn/\", //请求地址(必填)\r\n type: \"POST\", //请求方式(选填),默认为GET\r\n data: {name: \"Tom\", age: 25}, //请求数据(选填),可为\r\n //1、JSON对象,例:{a: 1, b: 2};\r\n //2、URL查询字符串,例:\"a=1&b=2\";\r\n //3、FormData对象,例:new FormData($form),其中$form为form元素,提交此类型时请求方式必须为POST\r\n dataType: \"json\", //请求的数据类型(选填),默认为json\r\n timeout: 10, //请求超时时间\r\n success: function(result){ //成功回调(选填)\r\n console.log(result); //如果请求的数据类型是json则会自动转换成js对象\r\n },\r\n error: function(status){ //失败回调(选填)\r\n console.log(status);\r\n }\r\n });\r\n */\r\n ajax: function(options) {\r\n var defaults = {\r\n url: '',\r\n type: 'GET',\r\n dataType: 'json',\r\n data: {},\r\n headers: {},\r\n timeout: null,\r\n noCache: true,\r\n success: function() {},\r\n error: function() {},\r\n complete: function() {}\r\n };\r\n\r\n var headers = {'Content-Type': 'application/x-www-form-urlencoded'};\r\n\r\n defaults = FD.extend(defaults, options);\r\n defaults.type = defaults.type.toUpperCase();\r\n\r\n if (defaults.config && defaults.config.headers) {\r\n defaults.headers = FD.extend(FD.extend(headers, defaults.config.headers), defaults.headers);\r\n } else {\r\n defaults.headers = FD.extend(headers, defaults.headers);\r\n }\r\n\r\n var params;\r\n\r\n if (typeof defaults.data === 'string' || defaults.data instanceof FormData) {\r\n params = defaults.data;\r\n } else {\r\n params = FD.util.formatParams(defaults.data, defaults.noCache);\r\n }\r\n\r\n var xhr = new XMLHttpRequest();\r\n var result = null;\r\n\r\n if (defaults.timeout && typeof defaults.timeout === 'number') {\r\n xhr.timeout = defaults.timeout * 1000;\r\n\r\n setTimeout(function() {\r\n xhr.abort();\r\n defaults.error('time out abort', xhr);\r\n defaults.complete(xhr);\r\n }, defaults.timeout * 1000);\r\n }\r\n\r\n var setHeaders = function () {\r\n for (var key in defaults.headers) {\r\n xhr.setRequestHeader(key, defaults.headers[key]);\r\n }\r\n };\r\n\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState == 4) {\r\n var status = xhr.status;\r\n\r\n if (status >= 200 && status < 300 || status === 304) {\r\n result = defaults.dataType === 'json' ? JSON.parse(xhr.responseText) : xhr.responseText;\r\n defaults.success(result, status, xhr);\r\n } else {\r\n defaults.error(status, xhr);\r\n }\r\n\r\n defaults.complete(xhr);\r\n }\r\n };\r\n\r\n if (defaults.data instanceof FormData) {\r\n xhr.open('POST', defaults.url, true);\r\n setHeaders();\r\n xhr.send(params);\r\n } else if (defaults.type == 'GET') {\r\n defaults.url = defaults.url.indexOf('?') !== -1 ? (defaults.url + '&') : (defaults.url + '?');\r\n xhr.open('GET', defaults.url + params, true);\r\n setHeaders();\r\n xhr.send(null);\r\n } else if (defaults.type == 'POST') {\r\n xhr.open('POST', defaults.url, true);\r\n setHeaders();\r\n xhr.send(params);\r\n }\r\n\r\n return xhr;\r\n },\r\n\r\n /**\r\n * 异步加载图片\r\n * @param {string} url 链接地址 \r\n * @param {function} callback 回调函数\r\n * @return null\r\n * eg\r\n FD.loadImage(\"https://www.baidu.com/img/bdlogo.png\", function(img){\r\n console.log(\"image width: \"+ img.width + \" image height: \"+ image.height);\r\n });\r\n */\r\n loadImage: function(url, callback) {\r\n var img = new Image();\r\n img.src = url;\r\n\r\n if (img.complete) {\r\n callback(img);\r\n return;\r\n }\r\n\r\n img.onload = function() {\r\n callback(img);\r\n };\r\n\r\n img.onerror = function() {\r\n callback(false);\r\n };\r\n },\r\n\r\n /**\r\n * cookie操作\r\n * @param {string} sMainName cookie名称\r\n * @param {string} sSubName cookie名称(选填)\r\n * @param {string} 返回的值\r\n * @return null\r\n * eg\r\n var mycookie = FD.cookie.get(\"cookieName\");\r\n FD.cookie.set(\"mykey\", \"myvalue\");\r\n */\r\n cookie: {\r\n get: function (sMainName, sSubName) {\r\n var re = new RegExp((sSubName ? sMainName + '=(?:.*?&)*?' + sSubName + '=([^&;$]*)' : sMainName + '=([^;$]*)'), 'i');\r\n var match = re.exec(decodeURIComponent(document.cookie));\r\n return match ? match[1] : '';\r\n },\r\n set: function (cookieName, cookieValue, minutes, path, domain, secure) {\r\n var expires = new Date();\r\n expires.setTime(expires.getTime() + (minutes * 60 * 1000));\r\n document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(cookieValue) +\r\n (expires ? '; expires=' + expires.toGMTString() : '') +\r\n (path ? '; path=' + path : '/') + \r\n (domain ? '; domain=' + domain : '') +\r\n (secure ? '; secure' : '');\r\n }\r\n },\r\n\r\n /**\r\n * 类似jquery的offset方法\r\n * @param {node} elem DOM节点\r\n eg\r\n FD.getOffset(document.getElementById(selectorID));\r\n */\r\n getOffset: function(elem) {\r\n var rect = elem.getBoundingClientRect(); //这种支持fixed的元素\r\n\r\n return {\r\n left: rect.left + (document.body.scrollLeft || document.documentElement.scrollLeft),\r\n top: rect.top + (document.body.scrollTop || document.documentElement.scrollTop)\r\n };\r\n\r\n /*\r\n //不支持fixed的元素\r\n var offset = {left: 0, top: 0};\r\n \r\n while(elem.offsetParent){\r\n offset.left += elem.offsetLeft;\r\n offset.top += elem.offsetTop;\r\n \r\n elem = elem.offsetParent;\r\n }\r\n \r\n return offset;\r\n */\r\n },\r\n\r\n /**\r\n * 获取jsonp数据\r\n * @param {string} url js地址\r\n * @param {function} callback 回调函数\r\n eg\r\n FD.getScript(url, function(result){ console.log(result); })\r\n */\r\n getJsonp: function(url, callback) {\r\n var callbackName = FD.util.getQueryString(url, \"callback\");\r\n var fn = callbackName ? callbackName : (\"callback\" + new Date().getTime());\r\n\r\n url = url.indexOf(\"?\") !== -1 ? (url + \"&callback=\" + fn) : (url + \"?callback=\" + fn);\r\n\r\n FD.getScript(url);\r\n\r\n window[fn] = function(data) {\r\n try {\r\n if (callback && typeof callback === \"function\") {\r\n callback(data);\r\n }\r\n } catch (e) {\r\n\r\n } finally {\r\n window[fn] = null;\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * 异步加载js\r\n * @param {string} url js地址\r\n * @param {function} callback 回调函数\r\n eg\r\n FD.getScript(url, function(){ console.log(\"loaded\"); })\r\n */\r\n getScript: function(url, callback) {\r\n if (!url) {\r\n throw new Error(\"url not allow null or empty\");\r\n }\r\n\r\n var head = document.getElementsByTagName(\"head\")[0];\r\n var js = document.createElement(\"script\");\r\n\r\n js.type = \"text/javascript\";\r\n js.src = url;\r\n head.appendChild(js);\r\n\r\n if (typeof callback !== \"function\") {\r\n return;\r\n }\r\n\r\n js.onload = function() {\r\n callback();\r\n };\r\n },\r\n\r\n /**\r\n * 执行一段JavaScript脚本\r\n * @param {string} text 要执行的js\r\n */\r\n execScript: function(text) {\r\n text = typeof text === \"string\" ? text : '';\r\n var head = document.getElementsByTagName(\"head\")[0];\r\n var js = document.createElement(\"script\");\r\n\r\n js.type = \"text/javascript\";\r\n\r\n if (js.text !== void(0)) {\r\n js.text = text;\r\n } else {\r\n js.appendChild(document.createTextNode(text));\r\n }\r\n\r\n head.appendChild(js);\r\n head.removeChild(js);\r\n },\r\n\r\n /**\r\n * 对象拷贝,类似jquery的$.extend()方法\r\n * @param {object} a 原对象\r\n * @param {object} b 新对象\r\n * @param {boolean} deep 是否深拷贝\r\n * @return {object} 合并后的对象\r\n * eg\r\n var newObj = FD.extend(obj1, obj2);\r\n */\r\n extend: function(a, b, deep) {\r\n deep = deep === true ? true : false;\r\n\r\n for (var i in b) {\r\n if (deep && typeof b[i] === \"object\" && b[i] !== null) {\r\n a[i] = a[i] || {};\r\n arguments.callee(a[i], b[i]);\r\n } else {\r\n if (b.hasOwnProperty(i)) {\r\n a[i] = b[i];\r\n }\r\n }\r\n }\r\n return a;\r\n },\r\n\r\n /**\r\n * 百度分享\r\n * @param {Element} elem 放置分享内容的DOM节点\r\n * @param {object} options 配置参数\r\n * @param {array} options.keys 要显示分享的数组\r\n * @param {number} options.size 图标的尺寸(16px or 32px)\r\n * eg\r\n var share = document.getElementById(\"selector\");\r\n FD.share.init(share, {keys: [\"sina\", \"tencent\", \"wechat\"], size: 32});\r\n */\r\n share: {\r\n init: function(elem, options) {\r\n FD.dom.append(elem, this.getHtml(options));\r\n this.load();\r\n },\r\n _items: {\r\n sina: '',\r\n tencent: '',\r\n wechat: '',\r\n qzone: '',\r\n renren: '',\r\n douban: '',\r\n friend: '',\r\n tieba: '',\r\n qq: '',\r\n mshare: ''\r\n },\r\n getHtml: function(options) {\r\n var defaults = {\r\n keys: (options && options.keys) || [\"sina\", \"tencent\", \"wechat\", \"qzone\", \"renren\", \"douban\", \"friend\", \"tieba\", \"qq\", \"mshare\"],\r\n size: 16\r\n };\r\n\r\n FD.extend(defaults, options || {});\r\n\r\n var buffer = '
';\r\n\r\n buffer += '';\r\n\r\n for (var i = 0, len = defaults.keys.length; i < len; i++) {\r\n buffer += this._items[defaults.keys[i]];\r\n }\r\n\r\n buffer += '
';\r\n return buffer;\r\n },\r\n load: function() {\r\n window._bd_share_config = {\r\n \"common\": {\r\n \"bdSnsKey\": {},\r\n \"bdText\": \"\",\r\n \"bdMini\": \"2\",\r\n \"bdMiniList\": false,\r\n \"bdPic\": \"\",\r\n \"bdStyle\": \"0\"\r\n },\r\n \"share\": [{\r\n \"tag\": \"share_16\",\r\n \"bdSize\": 16\r\n }, {\r\n \"tag\": \"share_32\",\r\n \"bdSize\": 32\r\n }]\r\n };\r\n // with(document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = '//bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];\r\n\r\n var script = document.createElement('script');\r\n var head = document.getElementsByTagName('head')[0] || document.body;\r\n script.src = '//bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5);\r\n head.appendChild(script);\r\n }\r\n },\r\n\r\n /**\r\n * 微信分享配置图文\r\n * @param {object} options 配置信息\r\n * @param {string} options.title 标题\r\n * @param {string} options.link 链接\r\n * @param {string} options.imgUrl 图片地址\r\n * @param {string} options.desc 描述\r\n * @param {function} options.success 成功回调\r\n * @param {function} options.fail 失败\r\n * eg\r\n * FD.initWechatShare();\r\n */\r\n initWechatShare: function(options) {\r\n if (!FD.util.isWeiXin()) {\r\n return;\r\n }\r\n\r\n var $desc = document.querySelector('meta[name=description]');\r\n var $link = document.querySelector('meta[name=wechatShareLink]');\r\n var $imgUrl = document.querySelector('meta[name=wechatShareImgUrl]');\r\n\r\n var defaults = {\r\n title: document.title,\r\n link: ($link && $link.getAttribute('content')) || location.href,\r\n imgUrl: ($imgUrl && $imgUrl.getAttribute('content')) || 'https://img.familydoctor.com.cn/images/jtys-512.png',\r\n desc: ($desc && $desc.getAttribute('content')) || document.title || '',\r\n success: function() {},\r\n cancel: function() {}\r\n };\r\n\r\n FD.extend(defaults, options);\r\n\r\n var wechatId;\r\n var href = defaults.link;\r\n\r\n // if (/(wx|www|m|payment.ap).familydoctor/.test(href)) {\r\n // wechatId = 'gh_d8dd09ffe8db';\r\n // // wechatId = 'gh_987afbb4fb09';\r\n // } else if (/((wx|nwechat.quan|cby).familydoctor|m.kedaifu.com)/.test(href)) {\r\n // wechatId = 'gh_06cf15f06ad0';\r\n // }\r\n if (/(wx|www|m|payment.ap).familydoctor/.test(href)||/((wx|nwechat.quan|cby).familydoctor|m.kedaifu.com)/.test(href)) {\r\n // wechatId = 'gh_d8dd09ffe8db';\r\n wechatId = 'gh_6d28f532b78d';\r\n }\r\n\r\n var getWechatConfig = function() {\r\n var domain = defaults.link.split('?')[0];\r\n var obj = FD.util.parseQueryString(defaults.link.split('#')[0]);\r\n var link = '';\r\n var arr = [];\r\n\r\n for (var key in obj) {\r\n if (key !== '_wechat_code_' && key !== '_wechat_type_') {\r\n arr.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(obj[key]));\r\n }\r\n }\r\n\r\n link = arr.length ? (domain + '?' + arr.join('&')) : domain;\r\n defaults.link = link;\r\n\r\n FD.ajax({\r\n url: 'https://jkapi.bj.familydoctor.com.cn/wx/wxAuth/getShareSignature',\r\n type: 'POST',\r\n dataType: 'json',\r\n data: {'appid': 'wx31f2f1337c8db22a'},\r\n headers:{'wx-client-href':location.href.split('#')[0]},\r\n success: function(res) {\r\n if (res) {\r\n try {\r\n if (typeof res !== \"object\") {\r\n res = JSON.parse(res);\r\n }\r\n\r\n res.data.appId && setConfig(res);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\"server error \" + res);\r\n }\r\n }\r\n });\r\n };\r\n\r\n var setConfig = function(res) {\r\n wx.config({\r\n debug: false,\r\n appId: res.data.appId,\r\n timestamp: res.data.timestamp,\r\n nonceStr: res.data.nonceStr,\r\n signature: res.data.signature,\r\n jsApiList: [\r\n 'onMenuShareTimeline',\r\n 'onMenuShareAppMessage',\r\n 'onMenuShareQQ',\r\n 'onMenuShareWeibo',\r\n 'onMenuShareQZone',\r\n 'hideMenuItems',\r\n 'updateAppMessageShareData',\r\n 'updateTimelineShareData'\r\n ]\r\n });\r\n };\r\n\r\n var ready = function() {\r\n wx.ready(function() {\r\n // jweixin 1.4 版\r\n if (!!wx.updateAppMessageShareData) {\r\n wx.updateAppMessageShareData(defaults);\r\n wx.updateTimelineShareData(defaults);\r\n } else {\r\n wx.onMenuShareTimeline(defaults);\r\n wx.onMenuShareAppMessage(defaults);\r\n wx.onMenuShareQQ(defaults);\r\n wx.onMenuShareWeibo(defaults);\r\n wx.onMenuShareQZone(defaults);\r\n }\r\n });\r\n };\r\n\r\n var init = function() {\r\n getWechatConfig();\r\n ready();\r\n window.isWechatShareInit = true;\r\n };\r\n\r\n if (window.wx) {\r\n init();\r\n } else if (typeof require === 'function') {\r\n try {\r\n require(['https://res.wx.qq.com/open/js/jweixin-1.4.0.js'], function(wx) {\r\n window.wx = wx;\r\n init();\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n },\r\n\r\n initTabs: function(selector, eventType) {\r\n selector = selector || '.js-tab-wrap';\r\n eventType = eventType || 'click';\r\n\r\n var wraps = document.querySelectorAll(selector);\r\n\r\n var init = function(wrap) {\r\n eventType = wrap.getAttribute('data-event-type') || eventType;\r\n var initIndex = parseInt(wrap.getAttribute('data-show-index')) || 0;\r\n var tabs = wrap.querySelectorAll('.js-tabs a');\r\n var items = wrap.querySelectorAll('.js-tab-item');\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n if (i === initIndex) {\r\n tabs[i].classList.add('active');\r\n tabs[i].classList.add('on');\r\n } else {\r\n tabs[i].classList.remove('active');\r\n tabs[i].classList.remove('on');\r\n }\r\n }\r\n\r\n for (var j = 0; j < items.length; j++) {\r\n if (j === initIndex) {\r\n items[j].classList.remove('hide');\r\n } else {\r\n items[j].classList.add('hide');\r\n }\r\n }\r\n\r\n var curTab = tabs[initIndex];\r\n var curItem = items[initIndex];\r\n\r\n [].forEach.call(tabs, function(m, i) {\r\n m.setAttribute('data-index', i);\r\n\r\n m.addEventListener(eventType, function() {\r\n var i = parseInt(this.getAttribute('data-index'));\r\n\r\n if (curTab) {\r\n curTab.classList.remove('active');\r\n curTab.classList.remove('on');\r\n }\r\n\r\n this.classList.add('active');\r\n this.classList.add('on');\r\n\r\n curTab = this;\r\n curItem.classList.add('hide');\r\n curItem = items[i];\r\n curItem.classList.remove('hide');\r\n });\r\n });\r\n\r\n [].forEach.call(items, function(m, i) {\r\n m.setAttribute('data-index', i);\r\n });\r\n };\r\n\r\n [].forEach.call(wraps, function(m) {\r\n init(m);\r\n });\r\n },\r\n\r\n // 检测微信鉴权\r\n initWechatAuth: function(callback) {\r\n callback = callback || function() {};\r\n\r\n var openId = FD.cookie.get('openId');\r\n\r\n if (openId) {\r\n FD.getWechatSubScribeStatus(openId, callback);\r\n }\r\n else {\r\n FD.getWechatOpenId(callback);\r\n }\r\n },\r\n\r\n // 获取openId\r\n getWechatOpenId: function(callback) {\r\n var appId = 'wx9ed66e25719d9bd5'; // 诊所服务号\r\n var url = encodeURIComponent(location.href.split('#')[0]);\r\n var scope = 'snsapi_base'; // snsapi_base 静默授权\r\n\t\tvar openId = FD.util.getQueryString(location.href, 'openId');\r\n\r\n callback = callback || function() {};\r\n\r\n if (openId) {\r\n FD.cookie.set('openId', openId, 60 * 24 * 365, '/');\r\n callback(true);\r\n }\r\n else {\r\n location.href = 'https://jkapi.bj.familydoctor.com.cn/wx/wxAuth/openid?appId=' + appId + '&bizUrl=' + url + '&scope=' + scope;\r\n }\r\n },\r\n\r\n // 获取微信公众号关注状态\r\n getWechatSubScribeStatus: function(openId, callback) {\r\n openId = openId || FD.cookie.get('openId');\r\n callback = callback || function() {};\r\n\r\n var wait = FD.showWaiting();\r\n\r\n FD.ajax({\r\n url: 'https://jkapi.bj.familydoctor.com.cn/wx/wxAuth/isSubscribe',\r\n type: 'POST',\r\n data: {\r\n appId: 'gh_6d28f532b78d', // 订阅号\r\n openId: openId\r\n },\r\n success: function(res) {\r\n if (res.code === 0) {\r\n if (res.data) {\r\n callback(true);\r\n }\r\n else {\r\n callback(false);\r\n }\r\n }\r\n else {\r\n callback(false);\r\n }\r\n },\r\n complete: function() {\r\n wait.close();\r\n },\r\n error: function(e) {\r\n console.log('error ' + e);\r\n callback(false);\r\n }\r\n });\r\n },\r\n\r\n // 获取微信用户信息(已废)\r\n getWechatUserInfo: function(code, callback) {\r\n FD.ajax({\r\n url: 'https://apko.familydoctor.com.cn/wxapi/index.php/internal/getWechatUserId.html',\r\n type: 'POST',\r\n data: {\r\n // wechatId: 'gh_d8dd09ffe8db',\r\n // wechatId: 'gh_baf62267fd69',\r\n // wechatId: 'gh_987afbb4fb09',\r\n wechatId: 'gh_987afbb4fb09',\r\n code: code,\r\n type: 1\r\n },\r\n success: function(res) {\r\n if (res.result && res.data.user) {\r\n callback(res.data.user.unionid);\r\n FD.cookie.set('wechatUnionId', res.data.user.unionid, 60 * 24 * 365, '/');\r\n }\r\n }\r\n });\r\n },\r\n\r\n // base64 编码\r\n b64EncodeUnicode: function(str) {\r\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\r\n function toSolidBytes(match, p1) {\r\n return String.fromCharCode('0x' + p1);\r\n }));\r\n },\r\n\r\n // base64 解码\r\n b64DecodeUnicode: function(str) {\r\n return decodeURIComponent(atob(str).split('').map(function(c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n }).join(''));\r\n },\r\n\r\n // 锁住页面\r\n pageLock: function() {\r\n document.documentElement.style.overflow = 'hidden';\r\n document.body.style.overflow = 'hidden';\r\n },\r\n\r\n // 解锁页面\r\n pageUnLock: function() {\r\n document.documentElement.style.overflow = 'auto';\r\n document.body.style.overflow = 'auto';\r\n },\r\n\r\n // 是否是 iPhone 设备\r\n isIOS: function() {\r\n if (!FD.isIOS.flag) {\r\n var ua = navigator.userAgent;\r\n\r\n FD.isIOS.flag = true;\r\n FD.isIOS.ios = /iphone|ios|ipad|ipod/i.test(ua) && ua.indexOf('Safari') !== -1;\r\n return FD.isIOS.ios;\r\n }\r\n\r\n return FD.isIOS.ios;\r\n },\r\n\r\n // 是否是 iPhone X 家族\r\n isIphoneXFamily: function() {\r\n var ratio = window.devicePixelRatio || 1;\r\n\r\n var screen = {\r\n width: window.screen.width * ratio,\r\n height: window.screen.height * ratio\r\n };\r\n\r\n var arr = [2436, 2688, 1792];\r\n\r\n if (FD.isIOS() && arr.some(function(m) {\r\n return m === screen.height;\r\n })) {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n //引导关注订阅号弹窗\r\n showSubscribeDialog: function(options) {\r\n var defaults = {\r\n title: '把健康揣进口袋',\r\n maskClick: true,\r\n onCloseAfter: function() {}\r\n };\r\n\r\n var html = '';\r\n\r\n html += '
';\r\n html += '

【方式1】

';\r\n html += '

在微信-联系人-公众号-添加中内搜索“家庭医生在线”订阅号并关注

';\r\n html += '';\r\n html += '
';\r\n html += '
';\r\n html += '

【方式2】

';\r\n html += '

使用微信扫描下方二维码

';\r\n html += '';\r\n html += '
';\r\n\r\n defaults.content = html;\r\n FD.extend(defaults, options);\r\n new FD.Dialog(defaults);\r\n }\r\n};\r\n\r\n/**\r\n * HTML5 Uploader plus\r\n * @param {node} fileEle 上传控件()\r\n * @param {object} options 配置参数\r\n * @param {string} url 服务端处理上传的url\r\n * @param {function} before 上传之前回调函数\r\n * @param {function} success 上传成功回调函数\r\n * @param {function} error 上传失败回调函数\r\n * @param {function} complete 上传完成回调函数\r\n * @param {function} progress 上传进度回调函数(0~100之间)\r\n eg\r\n new FD.Uploader(\r\n document.getElementById(\"fileInputId\"), \r\n {\r\n url: \"upload.php\",\r\n before: function(){\r\n console.log(\"before\");\r\n return true; //如果不返回true则会取消上传动作。\r\n },\r\n success: function(result){\r\n console.log(result);\r\n alert(JSON.stringify(result));\r\n },\r\n error: function(status){\r\n console.log(status);\r\n },\r\n progress: function(prog){\r\n console.log(prog);\r\n },\r\n complete: function(){\r\n console.log(\"complete\");\r\n }\r\n }\r\n );\r\n */\r\n(function () {\r\n function Uploader(fileEle, options) {\r\n var that = this;\r\n\r\n that.defaults = {\r\n url: \"\",\r\n data: {},\r\n before: function() {\r\n return true;\r\n },\r\n success: function() {},\r\n error: function() {},\r\n complete: function() {},\r\n progress: function() {}\r\n };\r\n\r\n FD.extend(that.defaults, options || {});\r\n that.fileEle = fileEle;\r\n\r\n that.fileEle.onchange = function() {\r\n if (!that.defaults.before()) {\r\n return false;\r\n }\r\n\r\n that._upload();\r\n };\r\n }\r\n\r\n Uploader.prototype._upload = function() {\r\n var that = this;\r\n var xhr = new XMLHttpRequest();\r\n var formData = new FormData();\r\n\r\n for (var key in that.defaults.data) {\r\n formData.append(key, that.defaults.data[key]);\r\n }\r\n\r\n formData.append(that.fileEle.name || 'file', that.fileEle.files[0]);\r\n xhr.open(\"POST\", that.defaults.url);\r\n\r\n xhr.onload = function() {\r\n if (xhr.status === 200) {\r\n that.defaults.success(JSON.parse(xhr.responseText));\r\n that.fileEle.value = '';\r\n } else {\r\n that.defaults.error(xhr.status);\r\n }\r\n\r\n that.defaults.complete(xhr.status);\r\n };\r\n\r\n xhr.upload.onprogress = function(event) {\r\n if (event.lengthComputable) {\r\n that.defaults.progress((event.loaded / event.total * 100 | 0).toFixed(2));\r\n }\r\n };\r\n\r\n xhr.send(formData);\r\n };\r\n\r\n FD.Uploader = Uploader;\r\n})();\r\n\r\n/**\r\n * echo plugin 弹出一条简单的提示信息\r\n * @param {node || string} content 信息内容\r\n * @param {number} sec 自动关闭的时间(秒)\r\n * @param {boolean} autoClose 是否自动关闭\r\n * @param {function} onOpened 打开之后回调函数\r\n * @param {function} onClosed 关闭之后回调函数\r\n */\r\n(function (doc) {\r\n function Echo(options) {\r\n this.defaults = {\r\n content: \"\",\r\n sec: 5,\r\n autoClose: false,\r\n onOpened: function() {},\r\n onClosed: function() {}\r\n };\r\n\r\n this.defaults = FD.extend(this.defaults, options || {});\r\n this.box = doc.createElement(\"div\");\r\n this._init();\r\n }\r\n\r\n Echo.prototype._init = function() {\r\n var that = this;\r\n\r\n that.box.style.cssText = \"display:none;position:fixed;top:50%;left:50%;z-index:999999;padding:8px 20px;border-radius:8px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:16px;color:white;text-align:center;-webkit-transition:.5s;transition:.5s;opacity:0;background:rgba(0,0,0,.8);\";\r\n\r\n if (typeof that.defaults.content === \"string\") {\r\n that.box.innerHTML = that.defaults.content;\r\n } else {\r\n that.box.appendChild(that.defaults.content);\r\n }\r\n\r\n doc.body.appendChild(that.box);\r\n that.open();\r\n };\r\n\r\n Echo.prototype.open = function() {\r\n var that = this;\r\n\r\n that.box.style.display = \"inline-block\";\r\n\r\n setTimeout(function() {\r\n that.box.style.opacity = 1;\r\n that.defaults.onOpened(that);\r\n }, 100);\r\n\r\n if (that.defaults.autoClose) {\r\n setTimeout(function() {\r\n that.close();\r\n }, that.defaults.sec * 1000);\r\n }\r\n };\r\n\r\n Echo.prototype.close = function() {\r\n var that = this;\r\n\r\n that.box.style.opacity = 0;\r\n\r\n setTimeout(function() {\r\n that.defaults.onClosed(that);\r\n doc.body.removeChild(that.box);\r\n }, 500);\r\n };\r\n\r\n FD.Echo = Echo;\r\n})(document);\r\n\r\n//dialog plugin 弹出一个窗口\r\n(function (doc, undefined) {\r\n function Dialog(settings) {\r\n this.defaults = {\r\n maxWidth: \"90%\",\r\n minWidth: \"100px\",\r\n width: \"80%\",\r\n height: \"auto\",\r\n title: \"提示\",\r\n content: \"\", //弹窗内容,可以是dom节点也可以是字符串\r\n className: \"dia-cont\",\r\n zIndex: 1000,\r\n dialogClassName: \"\",\r\n autoShow: true,\r\n maskClick: false,\r\n showTitle: true,\r\n showClose: true,\r\n onInit: function() {},\r\n onOpened: function() {},\r\n onCloseBefore: function() {},\r\n onCloseAfter: function() {}\r\n };\r\n this.defaults = FD.extend(this.defaults, settings || {});\r\n this.mask = null;\r\n this.box = null;\r\n this._init();\r\n }\r\n\r\n Dialog.prototype.level = 0;\r\n\r\n Dialog.prototype._init = function() {\r\n var that = this;\r\n var maxWidth = this.defaults.maxWidth;\r\n var minWidth = this.defaults.minWidth;\r\n var width = this.defaults.width;\r\n var height = this.defaults.height;\r\n var reg = /\\%|auto/i;\r\n\r\n Dialog.prototype.level++;\r\n that.mask = doc.createElement(\"div\");\r\n that.box = doc.createElement(\"div\");\r\n\r\n that.mask.className = \"dialog-mask\";\r\n that.mask.style.zIndex = that.defaults.zIndex + that.level;\r\n\r\n that.box.className = \"dialog-box \" + this.defaults.dialogClassName;\r\n that.box.style.zIndex = that.defaults.zIndex + that.level;\r\n that.box.style.maxWidth = reg.test(maxWidth) ? maxWidth : parseInt(maxWidth) + \"px\";\r\n that.box.style.minWidth = reg.test(minWidth) ? minWidth : parseInt(minWidth) + \"px\";\r\n that.box.style.width = reg.test(width) ? width : parseInt(width) + \"px\";\r\n that.box.style.height = reg.test(height) ? height : parseInt(height) + \"px\";\r\n\r\n that.sbj = doc.createElement(\"div\");\r\n that.sbj.className = \"dia-sbj\";\r\n that.title = doc.createElement(\"b\");\r\n that.cls = doc.createElement(\"a\");\r\n that.cls.className = \"dia-close\";\r\n that.cls.href = \"javascript:;\";\r\n that.sbj.appendChild(that.title);\r\n that.box.appendChild(that.cls);\r\n that.box.appendChild(that.sbj);\r\n that.cont = doc.createElement(\"div\");\r\n that.cont.className = that.defaults.className;\r\n that.box.appendChild(that.cont);\r\n doc.body.appendChild(that.mask);\r\n doc.body.appendChild(that.box);\r\n\r\n !that.defaults.showTitle ? that.sbj.style.display = \"none\" : void(0);\r\n !that.defaults.showClose ? that.cls.style.display = \"none\" : void(0);\r\n that.cls.innerHTML = \"×\";\r\n that.title.innerHTML = that.defaults.title;\r\n\r\n if (typeof that.defaults.content === \"string\") {\r\n that.cont.innerHTML = that.defaults.content;\r\n } else {\r\n that.contParentNode = that.defaults.content.parentNode;\r\n that.cont.appendChild(that.defaults.content);\r\n }\r\n\r\n that.cls.onclick = function() {\r\n that.close();\r\n };\r\n\r\n if (that.defaults.maskClick) {\r\n that.mask.onclick = function() {\r\n that.close();\r\n };\r\n }\r\n\r\n if (that.defaults.autoShow) {\r\n that.open();\r\n }\r\n\r\n that.defaults.onInit(that);\r\n };\r\n\r\n Dialog.prototype.open = function() {\r\n var that = this;\r\n var $box = that.box;\r\n var $mask = that.mask;\r\n\r\n $mask.style.display = \"block\";\r\n $box.style.display = \"block\";\r\n\r\n setTimeout(function() {\r\n $mask.style.opacity = 1;\r\n $box.style.opacity = 1;\r\n $box.style.top = \"50%\";\r\n that.defaults.onOpened(that);\r\n }, 100);\r\n };\r\n\r\n Dialog.prototype.close = function() {\r\n var that = this;\r\n that.defaults.onCloseBefore(that);\r\n that.mask.style.opacity = 0;\r\n that.box.style.opacity = 0;\r\n that.box.style.top = \"-50%\";\r\n\r\n setTimeout(function() {\r\n that.mask.style.display = \"none\";\r\n that.box.style.display = \"none\";\r\n that.defaults.onCloseAfter(that);\r\n doc.body.removeChild(that.mask);\r\n\r\n if (that.contParentNode) {\r\n that.contParentNode.appendChild(that.defaults.content);\r\n } else {\r\n doc.body.removeChild(that.box);\r\n }\r\n }, 200);\r\n };\r\n\r\n FD.Dialog = Dialog;\r\n})(document);\r\n\r\n//返回顶部plugin\r\n(function (doc, win) {\r\n function GotoTop(options) {\r\n this.defaults = {\r\n isShow: true,\r\n styles: {\r\n opacity: 0\r\n }\r\n };\r\n\r\n this.defaults = FD.extend(this.defaults, options || {});\r\n this.defaults = FD.extend(this.defaults, FD.GotoTop.options || {});\r\n this.box = document.createElement(\"div\");\r\n this.defaults.isShow && this._init();\r\n }\r\n\r\n //特殊页面可以通过这里覆盖设置或取消显示\r\n GotoTop.setting = function(options) {\r\n FD.GotoTop.options = options;\r\n };\r\n\r\n GotoTop.prototype._init = function() {\r\n var that = this;\r\n var box = that.box;\r\n var pageHeight = doc.body.scrollHeight;\r\n var winHeight = winHeight;\r\n\r\n box.className = \"icon-goto-top-gray iconfont icon-arrow-up fd-goto-top\";\r\n box.style.zIndex = -1;\r\n\r\n for (var key in that.defaults.styles) {\r\n box.style[key] = that.defaults.styles[key];\r\n }\r\n\r\n doc.body.appendChild(box);\r\n\r\n win.onscroll = function() {\r\n if (winHeight > pageHeight) {\r\n return;\r\n }\r\n\r\n if (document.body.scrollTop > winHeight) {\r\n that.fadeIn();\r\n } else {\r\n that.fadeOut();\r\n }\r\n };\r\n\r\n box.onclick = function() {\r\n win.scrollTo(0, 0);\r\n };\r\n };\r\n\r\n GotoTop.prototype.fadeIn = function() {\r\n this.box.style.opacity = 1;\r\n this.box.style.zIndex = 100;\r\n };\r\n\r\n GotoTop.prototype.fadeOut = function() {\r\n this.box.style.opacity = 0;\r\n this.box.style.zIndex = -1;\r\n };\r\n\r\n FD.GotoTop = GotoTop;\r\n})(document, window);\r\n\r\n//slider plugin\r\n(function (document, window) {\r\n function Slider(elem, options) {\r\n var that = this;\r\n\r\n this.defaults = {\r\n speed: 0.5, //动画移动速度\r\n direction: \"horizon\", //滚动方向 = \"horizon\" || \"vertical\"\r\n duration: 3, //动画时间间隔\r\n autoRun: false, //是否自动运行\r\n showAction: true, //是否显示上一张下一张\r\n showNav: false, //是否显示导航\r\n showTitle: false, //是否显示标题\r\n showNumber: false, //是否显示数字\r\n touch: true, //是否开启手势\r\n onInited: function() {}, //初始化完成回调\r\n onBefore: function() {}, //动画前回调\r\n onAfter: function() {} //动画后回调\r\n };\r\n\r\n this.defaults = FD.extend(this.defaults, options || {});\r\n this.$elem = elem;\r\n this.$wrap = document.createElement(\"div\");\r\n this.$box = document.createElement(\"div\");\r\n this.$items = this.$elem.querySelectorAll(\".fd-slider-item\");\r\n this.$title = document.createElement(\"div\");\r\n this.$number = document.createElement(\"div\");\r\n this.$curNum = document.createElement(\"span\");\r\n this.$totalNum = document.createElement(\"span\");\r\n this.$prev = document.createElement(\"a\");\r\n this.$next = document.createElement(\"a\");\r\n this.$nav = null;\r\n this.width = 0;\r\n this.height = 0;\r\n this.center = 0;\r\n this.count = this.$items.length;\r\n this.current = 0;\r\n this.runing = false;\r\n this.timer = null;\r\n this.timeId = null;\r\n this.isFirst = true;\r\n this.start = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.titles = [];\r\n this.$items = [].slice.call(this.$items);\r\n\r\n this.$wrap.className = \"fd-slider-wrap\";\r\n this.$box.className = \"fd-slider-inner\";\r\n\r\n for (var i = 0, len = this.count; i < len; i++) {\r\n FD.dom.append(this.$box, this.$items[i]);\r\n }\r\n\r\n this.$wrap.appendChild(this.$box);\r\n this.$elem.appendChild(this.$wrap);\r\n var checkTimes = 0;\r\n\r\n // 兼容在轮播中放置广告位\r\n var checkHeight = function() {\r\n var flag = that.$items.every(function($item) {\r\n return $item.getBoundingClientRect().height;\r\n });\r\n\r\n if (flag) {\r\n loadImages();\r\n } else {\r\n if (checkTimes < 100) {\r\n checkTimes++;\r\n setTimeout(checkHeight, 16);\r\n } else {\r\n checkFail();\r\n }\r\n }\r\n };\r\n\r\n var checkFail = function() {\r\n // var $list = that.$items.filter(function ($item) {\r\n // return $item.getBoundingClientRect().height;\r\n // });\r\n\r\n // that.$items = $list;\r\n // that.count = that.$items.length;\r\n loadImages();\r\n };\r\n\r\n var loadImages = function() {\r\n var $imgs = that.$elem.querySelectorAll('img');\r\n\r\n if ($imgs.length === 0) {\r\n that._init();\r\n return;\r\n }\r\n\r\n var num = 0;\r\n\r\n var deal = function() {\r\n num++;\r\n\r\n if (num >= $imgs.length) {\r\n that._init();\r\n }\r\n };\r\n\r\n $imgs.forEach(function($img) {\r\n FD.loadImage($img.src, function() {\r\n deal();\r\n });\r\n });\r\n };\r\n\r\n checkHeight();\r\n }\r\n\r\n Slider.prototype._init = function() {\r\n var that = this;\r\n init();\r\n\r\n function init() {\r\n var itemMaxHeight = 0;\r\n var itemMaxWidth = 0;\r\n\r\n that.$items.forEach(function($item) {\r\n var rectObj = $item.getBoundingClientRect();\r\n var currHeight = rectObj.height;\r\n var currWidth = rectObj.width;\r\n itemMaxHeight = currHeight > itemMaxHeight ? currHeight : itemMaxHeight;\r\n itemMaxWidth = currWidth > itemMaxWidth ? currWidth : itemMaxWidth;\r\n });\r\n\r\n that.width = that.$elem.getBoundingClientRect().width;\r\n that.height = itemMaxHeight;\r\n that.$elem.style.minHeight = that.height + \"px\";\r\n that.$wrap.style.height = that.height + \"px\";\r\n that.$wrap.style.overflow = \"hidden\";\r\n\r\n if (that.defaults.direction === \"horizon\") {\r\n that.$box.style.width = that.width * (that.count + 2) + \"px\";\r\n that.$box.style.height = that.height + \"px\";\r\n that.delta = that.width;\r\n }\r\n\r\n if (that.defaults.direction === \"vertical\") {\r\n that.$box.style.width = that.width + \"px\";\r\n that.$box.style.height = that.height * (that.count + 2) + \"px\";\r\n that.delta = that.height;\r\n }\r\n\r\n that.$items.forEach(function($item) {\r\n $item.style.width = that.width + 'px';\r\n $item.style.height = that.height + 'px';\r\n });\r\n\r\n that.$box.appendChild(that.$items[0].cloneNode(true));\r\n that.$box.insertAdjacentElement(\"afterbegin\", that.$items[that.count - 1].cloneNode(true));\r\n\r\n setStyle.call(that, -that.delta);\r\n\r\n if (that.defaults.showAction) {\r\n that.$prev.href = \"javascript:;\";\r\n that.$prev.className = \"fd-slider-action iconfont icon-left prev\";\r\n that.$prev.style.display = \"block\";\r\n that.$next.href.display = \"javascript:;\";\r\n that.$next.className = \"fd-slider-action iconfont icon-right next\";\r\n that.$next.style.display = \"block\";\r\n that.$elem.appendChild(that.$prev);\r\n that.$elem.appendChild(that.$next);\r\n\r\n that.$prev.addEventListener(\"click\", function() {\r\n that.scrollPrev();\r\n }, false);\r\n\r\n that.$next.addEventListener(\"click\", function() {\r\n that.scrollNext();\r\n }, false);\r\n }\r\n\r\n if (that.defaults.showNav && that.count > 1) {\r\n that._randerNav();\r\n }\r\n\r\n if (that.defaults.showTitle) {\r\n that.$title.className = \"fd-slider-title\";\r\n that.$elem.appendChild(that.$title);\r\n\r\n [].forEach.call(that.$items, function(item, i) {\r\n var img = item.querySelector(\"img\");\r\n\r\n title = (img && img.title) || '';\r\n that.titles.push(title);\r\n });\r\n\r\n that.$title.innerText = that.titles[0];\r\n }\r\n\r\n if (that.defaults.showNumber) {\r\n that.$number.className = \"fd-slider-num\";\r\n that.$number.appendChild(that.$curNum);\r\n that.$number.appendChild(that.$totalNum);\r\n that.$elem.appendChild(that.$number);\r\n\r\n that.$curNum.innerText = 1;\r\n that.$totalNum.innerText = '/' + that.count;\r\n }\r\n\r\n if (that.defaults.autoRun && that.count > 1) {\r\n that.autoRun();\r\n }\r\n\r\n if (that.defaults.touch) {\r\n that.$box.addEventListener(\"touchstart\", function(e) {\r\n var touch = e.changedTouches[0];\r\n\r\n that.start = {\r\n x: touch.clientX,\r\n y: touch.clientY\r\n };\r\n\r\n if (that.defaults.direction === \"vertical\") {\r\n e.preventDefault();\r\n }\r\n }, false);\r\n\r\n that.$box.addEventListener(\"touchmove\", function(e) {\r\n var touch = e.changedTouches[0];\r\n var end = {\r\n x: touch.clientX,\r\n y: touch.clientY\r\n };\r\n var dir, ban;\r\n\r\n if (that.defaults.direction === \"horizon\") {\r\n dir = \"x\";\r\n ban = \"y\";\r\n }\r\n\r\n if (that.defaults.direction === \"vertical\") {\r\n dir = \"y\";\r\n ban = \"x\";\r\n }\r\n\r\n if (Math.abs(end[ban] - that.start[ban]) > Math.abs(end[dir] - that.start[dir])) {\r\n return;\r\n }\r\n\r\n if (Math.abs(end[dir] - that.start[dir]) < 30) {\r\n return;\r\n }\r\n\r\n if (end[dir] - that.start[dir] > 0) {\r\n that.scrollPrev();\r\n } else {\r\n that.scrollNext();\r\n }\r\n }, false);\r\n }\r\n\r\n that.defaults.onInited(that);\r\n }\r\n };\r\n\r\n Slider.prototype._randerNav = function() {\r\n var that = this;\r\n var buffer = '';\r\n\r\n that.$nav = document.createElement(\"div\");\r\n\r\n [].forEach.call(that.$items, function(item, i) {\r\n buffer += '' + (i + 1) + '';\r\n });\r\n\r\n that.$nav.className = \"fd-slider-nav\";\r\n that.$nav.innerHTML = buffer;\r\n that.$elem.appendChild(that.$nav);\r\n\r\n that.$nav.addEventListener(\"click\", function(e) {\r\n var target = e.target;\r\n\r\n if (target.nodeName === \"A\") {\r\n if (target.classList.contains(\"on\")) {\r\n return;\r\n }\r\n that.current = parseInt(target.innerText) - 2;\r\n that.scroll(\"next\");\r\n }\r\n });\r\n };\r\n\r\n Slider.prototype.scroll = function(direction) {\r\n direction = direction || \"next\";\r\n\r\n if (direction === \"next\") {\r\n this.scrollNext();\r\n } else {\r\n this.scrollPrev();\r\n }\r\n };\r\n\r\n Slider.prototype.autoRun = function() {\r\n var that = this;\r\n\r\n that.timer = setTimeout(function() {\r\n that.scroll();\r\n that.autoRun();\r\n }, 1000 * that.defaults.duration);\r\n };\r\n\r\n Slider.prototype.scrollNext = function() {\r\n var that = this;\r\n if (that.runing) {\r\n return;\r\n }\r\n that.current++;\r\n scroll.call(that, \"next\");\r\n };\r\n\r\n Slider.prototype.scrollPrev = function() {\r\n var that = this;\r\n if (that.runing) {\r\n return;\r\n }\r\n that.current--;\r\n scroll.call(that, \"prev\");\r\n };\r\n\r\n Slider.prototype._stopAndRestart = function() {\r\n var that = this;\r\n\r\n if (that.defaults.autoRun && that.count > 1) {\r\n clearInterval(that.timer);\r\n clearTimeout(that.timeId);\r\n\r\n that.timeId = setTimeout(function() {\r\n that.autoRun();\r\n }, 1000 * 10);\r\n }\r\n };\r\n\r\n Slider.prototype._useAnimate = function() {\r\n var that = this;\r\n that.$box.style.webkitTransition = \"transform \" + that.defaults.speed + \"s ease-out\";\r\n that.$box.style.transition = \"transform \" + that.defaults.speed + \"s ease-out\";\r\n };\r\n\r\n Slider.prototype._noAnimate = function() {\r\n this.$box.style.webkitTransition = \"none\";\r\n this.$box.style.transition = \"none\";\r\n };\r\n\r\n Slider.prototype._scroll = function() {\r\n var that = this;\r\n\r\n that._useAnimate();\r\n setStyle.call(that, -that.delta * (that.current + 1));\r\n };\r\n\r\n FD.Slider = Slider;\r\n\r\n function scroll(direction) {\r\n var that = this;\r\n\r\n that.runing = true;\r\n that.defaults.onBefore(that);\r\n that._stopAndRestart();\r\n that._scroll();\r\n\r\n setTimeout(function() {\r\n that.runing = false;\r\n\r\n if (that.current === that.count) {\r\n that._noAnimate();\r\n setStyle.call(that, -that.delta);\r\n that.current = 0;\r\n } else if (that.current === -1) {\r\n that._noAnimate();\r\n setStyle.call(that, -that.count * that.delta);\r\n that.current = that.count - 1;\r\n }\r\n\r\n that.defaults.onAfter(that);\r\n }, 1000 * that.defaults.speed);\r\n\r\n var realIndex = that.current;\r\n\r\n if (that.current === that.count) {\r\n realIndex = 0;\r\n } else if (that.current === -1) {\r\n realIndex = that.count - 1;\r\n }\r\n\r\n if (that.defaults.showNav && that.count > 1) {\r\n var curNav = that.$nav.querySelector(\"a.on\");\r\n\r\n curNav && curNav.classList.remove(\"on\");\r\n that.$nav.querySelectorAll(\"a\")[realIndex].classList.add(\"on\");\r\n }\r\n\r\n if (that.defaults.showTitle) {\r\n that.$title.innerText = that.titles[realIndex];\r\n }\r\n\r\n if (that.defaults.showNumber) {\r\n that.$curNum.innerText = realIndex + 1;\r\n }\r\n }\r\n\r\n function setStyle(val) {\r\n var that = this;\r\n\r\n if (that.defaults.direction === \"horizon\") {\r\n that.$box.style.webkitTransform = \"translate3d(\" + val + \"px,0,0)\";\r\n that.$box.style.transform = \"translate3d(\" + val + \"px,0,0)\";\r\n }\r\n\r\n if (that.defaults.direction === \"vertical\") {\r\n that.$box.style.webkitTransform = \"translate3d(0,\" + val + \"px,0)\";\r\n that.$box.style.transform = \"translate3d(0,\" + val + \"px,0)\";\r\n }\r\n }\r\n})(document, window);\r\n\r\n//drawer plugin\r\n(function (doc, win) {\r\n function Drawer(options) {\r\n this.defaults = {\r\n direction: \"toLeft\", //动画进入方向(toLeft, toRight, toTop, toBottom)\r\n speed: 0.5, //动画速度,单位:秒\r\n size: \"auto\", //宽度或高度\r\n offset: [0, 0], //相对于x轴或y轴的偏移量\r\n zIndex: 200, //css zIndex\r\n showMask: true, //是否显示蒙蔽\r\n className: \"drawer\", //css className\r\n content: \"null\", //内容,Node或html\r\n onInit: function() {}, //初始化之后回调\r\n onShow: function() {}, //显示之后回调\r\n onHide: function() {} //关闭之后回调\r\n };\r\n\r\n this.defaults = FD.extend(this.defaults, options);\r\n this.box = doc.createElement(\"div\");\r\n this.mask = doc.createElement(\"div\");\r\n this.isRuning = false;\r\n this._init();\r\n }\r\n\r\n Drawer.prototype._init = function() {\r\n var that = this;\r\n that.box.style.visibility = \"hidden\";\r\n\r\n if (typeof that.defaults.content === \"object\") {\r\n that.box.appendChild(that.defaults.content);\r\n } else {\r\n that.box.innerHTML = that.defaults.content;\r\n }\r\n\r\n switch (that.defaults.direction) {\r\n case \"toLeft\":\r\n that.defaults.css = {\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n width: that.defaults.size,\r\n transform: \"translate3d(100%,\" + that.defaults.offset[1] + \",0)\"\r\n };\r\n\r\n break;\r\n case \"toRight\":\r\n that.defaults.css = {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n width: that.defaults.size,\r\n transform: \"translate3d(-100%,\" + that.defaults.offset[1] + \",0)\"\r\n };\r\n\r\n break;\r\n case \"toTop\":\r\n that.defaults.css = {\r\n width: \"100%\",\r\n maxWidth: \"768px\",\r\n bottom: 0,\r\n height: that.defaults.size,\r\n transform: \"translate3d(0,100%,0)\"\r\n };\r\n\r\n break;\r\n case \"toBottom\":\r\n that.defaults.css = {\r\n width: \"100%\",\r\n maxWidth: \"768px\",\r\n top: 0,\r\n height: that.defaults.size,\r\n transform: \"translate3d(0,-100%,0)\"\r\n };\r\n\r\n break;\r\n }\r\n\r\n for (var key in that.defaults.css) {\r\n that.box.style[key] = that.defaults.css[key];\r\n }\r\n\r\n var classNames = that.defaults.className.split(\" \");\r\n var maskClassName = that.defaults.className + \"-mask\";\r\n\r\n if (classNames.length > 1) {\r\n maskClassName = \"drawer-mask \" + classNames[classNames.length - 1] + \"-mask\";\r\n }\r\n\r\n var transition = \"transform \" + that.defaults.speed + \"s ease-out\";\r\n var transOpacity = \"opacity \" + that.defaults.speed + \"s ease-out\";\r\n\r\n that.box.style.webkitTransform = that.defaults.css.transform;\r\n that.box.style.zIndex = that.defaults.zIndex;\r\n that.box.className = that.defaults.className;\r\n that.box.style.display = \"block\";\r\n that.box.style.position = \"fixed\";\r\n that.box.style.webkitTransition = \"-webkit-\" + transition;\r\n that.box.style.transition = transition;\r\n that.mask.className = maskClassName;\r\n that.mask.style.zIndex = that.defaults.zIndex;\r\n that.mask.style.webkitTransition = \"-webkit-\" + transOpacity;\r\n that.mask.style.transition = transOpacity;\r\n !that.defaults.showMask && (that.mask.style.display = \"none\");\r\n that.closed = true;\r\n doc.body.appendChild(that.mask);\r\n doc.body.appendChild(that.box);\r\n\r\n that.mask.onclick = function() {\r\n that.hide();\r\n };\r\n that.defaults.onInit(that);\r\n\r\n var type = \"transitionend\" in that.box.style ? \"transitionend\" : \"webkitTransitionEnd\";\r\n\r\n that.box.addEventListener(type, function() {\r\n that.isRuning = false;\r\n });\r\n };\r\n\r\n Drawer.prototype.show = function() {\r\n var that = this;\r\n\r\n if (that.isRuning) {\r\n return;\r\n }\r\n that.isRuning = true;\r\n that.box.style.visibility = \"visible\";\r\n that.defaults.showMask && (that.mask.style.display = \"block\");\r\n\r\n setTimeout(function() {\r\n that.box.style.transform = \"translate3d(\" + that.defaults.offset.join(\",\") + \",0)\";\r\n that.box.style.webkitTransform = \"translate3d(\" + that.defaults.offset.join(\",\") + \",0)\";\r\n that.closed = false;\r\n\r\n that.defaults.showMask && (that.mask.style.opacity = 1);\r\n that.defaults.onShow(that);\r\n }, 30);\r\n };\r\n\r\n Drawer.prototype.hide = function(callback) {\r\n var that = this;\r\n\r\n if (that.isRuning) {\r\n return;\r\n }\r\n that.isRuning = true;\r\n that.box.style.transform = that.defaults.css.transform;\r\n that.box.style.webkitTransform = that.defaults.css.transform;\r\n\r\n setTimeout(function() {\r\n that.box.style.visibility = \"hidden\";\r\n }, that.defaults.speed * 1000);\r\n\r\n if (that.defaults.showMask) {\r\n that.mask.style.opacity = 0;\r\n setTimeout(function() {\r\n that.mask.style.display = \"none\";\r\n }, that.defaults.speed * 1000);\r\n }\r\n\r\n that.closed = true;\r\n that.defaults.onHide(that);\r\n };\r\n\r\n Drawer.prototype.toggle = function(fn) {\r\n if (this.isRuning) {\r\n return;\r\n }\r\n if (typeof fn !== \"function\") {\r\n fn = function() {};\r\n }\r\n\r\n if (this.closed) {\r\n fn(true);\r\n this.show();\r\n } else {\r\n fn(false);\r\n this.hide();\r\n }\r\n };\r\n\r\n Drawer.prototype.lock = function() {\r\n doc.body.style.height = \"100%\";\r\n doc.body.style.overflow = \"hidden\";\r\n doc.documentElement.style.height = \"100%\";\r\n doc.documentElement.style.overflow = \"hidden\";\r\n };\r\n\r\n Drawer.prototype.unlock = function() {\r\n doc.body.style.height = \"auto\";\r\n doc.body.style.overflow = \"auto\";\r\n doc.documentElement.style.height = \"auto\";\r\n doc.documentElement.style.overflow = \"auto\";\r\n };\r\n\r\n FD.Drawer = Drawer;\r\n})(document, window);\r\n\r\n//自动补全\r\n(function() {\r\n function AutoComplete(input, options) {\r\n if (!(this instanceof AutoComplete)) {\r\n return new AutoComplete(input, options);\r\n }\r\n\r\n this.defaults = {\r\n maxWidth: \"768px\",\r\n width: \"100%\", //宽度 string\r\n offset: [0, 0], //[left, top] int 偏移量\r\n className: \"auto-cpl-box\", //样式类名\r\n delay: 300, //延迟触发的时间间隔\r\n atleast: 500, //至少触发一次的时间\r\n onInput: function() {} //输入触发回调函数\r\n };\r\n this.box = null;\r\n this.input = input;\r\n this.defaults = FD.extend(this.defaults, options);\r\n this._init();\r\n }\r\n\r\n AutoComplete.prototype._init = function() {\r\n var that = this;\r\n var timer = null;\r\n var previous = null;\r\n\r\n var fire = function(keyword) {\r\n that.show();\r\n that.defaults.onInput(keyword, that);\r\n };\r\n\r\n var fn = function(keyword) {\r\n var now = +new Date();\r\n\r\n if (!keyword) {\r\n that.hide();\r\n return;\r\n }\r\n\r\n if (!previous) {\r\n previous = now;\r\n }\r\n\r\n if (now - previous > that.defaults.atleast) {\r\n fire(keyword);\r\n previous = now;\r\n } else {\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(function() {\r\n fire(keyword);\r\n }, that.defaults.delay);\r\n }\r\n };\r\n\r\n that.input.setAttribute('autocomplete', 'off');\r\n that.box = document.createElement(\"div\");\r\n document.body.appendChild(that.box);\r\n that._initBox();\r\n\r\n that.input.addEventListener(\"input\", function() {\r\n fn(that.input.value.trim());\r\n }, false);\r\n\r\n that.input.addEventListener(\"focus\", function() {\r\n fn(that.input.value.trim());\r\n }, false);\r\n\r\n document.addEventListener(\"click\", function(e) {\r\n var target = e.target;\r\n\r\n if (target !== that.box && target !== that.input) {\r\n that.hide();\r\n }\r\n });\r\n };\r\n\r\n AutoComplete.prototype._initBox = function() {\r\n var that = this;\r\n var pos = FD.getOffset(that.input);\r\n var width = that.defaults.width === \"auto\" ? (that.input.offsetWidth - 2 + \"px\") : that.defaults.width;\r\n var height = that.input.offsetHeight;\r\n\r\n that.box.className = that.defaults.className;\r\n that.box.style.display = \"none\";\r\n that.box.style.position = \"absolute\";\r\n that.box.style.width = width;\r\n that.box.style.maxWidth = that.defaults.maxWidth;\r\n\r\n that.box.style.top = pos.top + height + parseInt(that.defaults.offset[1]) + \"px\";\r\n\r\n if (that.defaults.offset[0] !== null) {\r\n that.box.style.left = pos.left + parseInt(that.defaults.offset[0]) + \"px\";\r\n } else {\r\n that.box.style.left = 0;\r\n }\r\n };\r\n\r\n AutoComplete.prototype.hide = function() {\r\n this.box.style.display = \"none\";\r\n };\r\n\r\n AutoComplete.prototype.show = function() {\r\n this.box.style.display = \"block\";\r\n };\r\n\r\n FD.AutoComplete = AutoComplete;\r\n})();\r\n\r\n// 头条按钮\r\n(function (doc, win) {\r\n function BtnToutiaoShow() {\r\n if (win.isBtnToutiaoShow) {\r\n return;\r\n }\r\n\r\n var ua = navigator.userAgent;\r\n var url = window.location.href;\r\n var timeoutID = null;\r\n\r\n if (!/m.familydoctor.com.cn/.test(url)) {\r\n return;\r\n }\r\n\r\n // 首页不执行\r\n if (/^(\\w+):\\/\\/m.familydoctor.com.cn\\/$/.test(url.split('#')[0])) {\r\n return;\r\n }\r\n\r\n // 判断头条app\r\n if (ua.indexOf('NewsArticle') === -1 && ua.indexOf('NewsLite') === -1) {\r\n return;\r\n }\r\n\r\n // ipad 不执行\r\n if (FD.isIOS()) {\r\n if (ua.indexOf('iPad') !== -1) {\r\n return;\r\n }\r\n }\r\n\r\n function getDate() {\r\n if (doc.body) {\r\n // var dialog = FD.showWaiting();\r\n\r\n FD.ajax({\r\n url: 'https://jkapi.bj.familydoctor.com.cn/toutiao/getButtonFieldFromToutiao',\r\n type: 'GET',\r\n success: function(res) {\r\n if (res.err_code === 0) {\r\n initHtml(res.data);\r\n } else {\r\n console.log(res.msg);\r\n }\r\n },\r\n complete: function() {\r\n // dialog.close();\r\n win.isBtnToutiaoShow = true; // yyk.js 不重复执行\r\n },\r\n error: function(e) {\r\n console.log('error ' + e.msg);\r\n }\r\n });\r\n clearTimeout(timeoutID);\r\n } else {\r\n timeoutID = setTimeout(getDate, 50);\r\n }\r\n }\r\n\r\n function initHtml(data) {\r\n var dl = document.createElement('dl');\r\n var dt = document.createElement('dt');\r\n var dd = document.createElement('dd');\r\n var a_pro = document.createElement('a');\r\n var a_free = document.createElement('a');\r\n var style = document.createElement('style');\r\n var data_pro = data.buttons[0];\r\n var data_free = data.buttons[1];\r\n // var dialog = FD.showWaiting;\r\n\r\n dl.style.position = 'fixed';\r\n dl.style.zIndex = '100';\r\n dl.style.bottom = '0';\r\n dl.style.left = '0';\r\n dl.style.right = '0';\r\n dl.style.padding = '12px 17px';\r\n dl.style.backgroundColor = '#fff';\r\n\r\n dt.style.width = '50%';\r\n dt.style.float = 'left';\r\n dt.style.paddingRight = '5px';\r\n\r\n dd.style.width = '50%';\r\n dd.style.float = 'left';\r\n dd.style.paddingLeft = '5px';\r\n\r\n a_pro.classList.add('btn-toutiao', 'btn-toutiao-professor');\r\n a_pro.href = data_pro.open_url;\r\n a_pro.innerHTML = data_pro.text;\r\n\r\n a_free.classList.add('btn-toutiao', 'btn-toutiao-free');\r\n a_free.href = data_free.open_url;\r\n a_free.innerHTML = data_free.text;\r\n\r\n style.innerHTML = '' +\r\n '.btn-toutiao {display:block;line-height:38px;overflow:hidden;border-radius:3px;text-align:center;color:#000;font-size:16px;}' +\r\n '.btn-toutiao em {padding:3px;margin-left:3px;border-radius:2px;vertical-align:top;color:#fff;font-size:11px;background:#2da822;}' +\r\n '.btn-toutiao-professor {border:1px solid #3d98ff;}' +\r\n '.btn-toutiao-free {border:1px solid grey;}';\r\n\r\n if (data_pro.is_limit === 1) {\r\n a_pro.innerHTML += '' + data_pro.limit_text + '';\r\n }\r\n\r\n if (data_free.is_limit === 1) {\r\n a_free.innerHTML += '' + data_pro.limit_text + '';\r\n }\r\n\r\n dt.appendChild(a_pro);\r\n dd.appendChild(a_free);\r\n dl.appendChild(dt);\r\n dl.appendChild(dd);\r\n doc.body.appendChild(style);\r\n doc.body.appendChild(dl);\r\n }\r\n\r\n getDate();\r\n ToutiaoCount();\r\n }\r\n\r\n // 头条统计\r\n function ToutiaoCount(){\r\n (function() {\r\n var hm = document.createElement('script');\r\n hm.src = 'https://hm.baidu.com/hm.js?8056f3a82e74936107f0490e93709158';\r\n var s = document.getElementsByTagName('script')[0]; \r\n s.parentNode.insertBefore(hm, s);\r\n })();\r\n }\r\n\r\n BtnToutiaoShow();\r\n})(document, window);\r\n\r\n// 底部 yyk 推荐医院/推荐文章\r\n(function () {\r\n var inityykRecommend = function () {\r\n Array.prototype.map = function (callback) {\r\n var arr = [];\r\n for (var i = 0; i < this.length; i++) {\r\n arr.push(callback(this[i], i));\r\n }\r\n return arr;\r\n };\r\n\r\n var renderHos = function (ele, data) {\r\n ele.innerHTML += data.map(function (item) {\r\n return '
  • ' + item.HospitalName + '
  • ';\r\n }).join('');\r\n };\r\n \r\n var renderArticle = function (ele, data) {\r\n ele.innerHTML += data.map(function (item) {\r\n return '
  • ' + item.Title + '
  • ';\r\n }).join('');\r\n };\r\n\r\n var renderDr = function (ele, data) {\r\n ele.innerHTML += data.map(function (item) {\r\n return '
  • ' + item.Name + '
  • ';\r\n }).join('');\r\n };\r\n \r\n var getCont = function (path, callback) {\r\n var $wrap = null;\r\n \r\n switch (path) {\r\n case 'GetHospitalList':\r\n $wrap = document.querySelector('.js-yyk-hos');\r\n break;\r\n case 'GetStateHospitalList':\r\n $wrap = document.querySelector('.js-yyk-hos-20241022');\r\n break;\r\n case 'GetStateDoctorList':\r\n $wrap = document.querySelector('.js-yyk-dr');\r\n break;\r\n case 'GetCustomArticleList':\r\n $wrap = document.querySelector('.js-yyk-article');\r\n break;\r\n }\r\n \r\n if (!$wrap) {\r\n return;\r\n }\r\n \r\n FD.ajax({\r\n url: 'https://kuapi.ap.familydoctor.com.cn/Hospital/' + path + '?Token=6532F73E301244D0ACD^A7C751*779A989',\r\n type: 'GET',\r\n success: function (res) {\r\n if (!res.Bool) {\r\n throw new Error('获取数据失败');\r\n }\r\n typeof callback === 'function' && callback && callback($wrap, res.Data);\r\n },\r\n error: function (err) {\r\n throw new Error(err);\r\n }\r\n });\r\n };\r\n \r\n getCont('GetHospitalList', renderHos);\r\n getCont('GetStateHospitalList', renderHos);\r\n getCont('GetStateDoctorList', renderDr);\r\n getCont('GetCustomArticleList', renderArticle);\r\n };\r\n\r\n FD.dom.ready(function () {\r\n inityykRecommend();\r\n });\r\n})();\r\n\r\n//仿微信图片浏览\r\n/* (function(doc, win){\r\n var defaults = {\r\n photos: [],\r\n showNav: true,\r\n zIndex: 9999\r\n };\r\n\r\n var mask = {};\r\n var curPhoto = null;\r\n var start = {x: 0, y: 0, dis: 0};\r\n var winWidth = win.innerWidth;\r\n var winHeight = win.innerHeight;\r\n var isZoom = false;\r\n\r\n var slider = {\r\n photos: [],\r\n ul: doc.createElement(\"ul\"),\r\n show: function (i) {\r\n i = i || 0;\r\n slider.ul.style.opacity = 1;\r\n slider.ul.style.display = \"block\";\r\n curPhoto = slider.photos[i];\r\n\r\n slider.ul.style.left = -(win.innerWidth * i + 1) + \"px\";\r\n curPhoto.style.width = win.innerWidth + \"px\";\r\n\r\n setTimeout(function() {\r\n curPhoto.style.webkitTransition = \"none\";\r\n curPhoto.style.transition = \"none\";\r\n curPhoto.style.top = 0;\r\n curPhoto.style.left = 0;\r\n curPhoto.style.webkitTransform = \"translate(0, \"+ (winHeight - curPhoto.naturalHeight * winWidth/curPhoto.naturalWidth)/2 +\"px)\";\r\n curPhoto.style.transform = \"translate(0, \"+ (winHeight - curPhoto.naturalHeight * winWidth/curPhoto.naturalWidth)/2 +\"px)\";\r\n\r\n setTimeout(function() {\r\n curPhoto.style.webkitTransition = \"width .5s, left .5s, top .5s\";\r\n curPhoto.style.transition = \"width .5s, left .5s, top .5s\";\r\n }, 30);\r\n }, 600);\r\n },\r\n hide: function () {\r\n mask.hide();\r\n slider.ul.style.opacity = 0;\r\n\r\n setTimeout(function() {\r\n slider.ul.style.display = \"none\";\r\n resetPos(curPhoto);\r\n }, 600);\r\n }\r\n };\r\n\r\n function PhotoView (options) {\r\n FD.extend(defaults, options);\r\n this.slider = slider;\r\n init.call(this);\r\n };\r\n\r\n var init = function () {\r\n createMask.call(this);\r\n createSlider.call(this);\r\n\r\n [].forEach.call(defaults.photos, function (photo, index) {\r\n append(photo);\r\n \r\n (function(img, i){\r\n img.addEventListener(\"click\", function () {\r\n mask.show();\r\n slider.show(i);\r\n });\r\n })(photo, index);\r\n });\r\n };\r\n\r\n var touchstart = function (e) {\r\n if (e.touches.length > 1) {\r\n //console.log(\"mutiple\");\r\n var disX = Math.abs(e.touches[0].pageX - e.touches[1].pageX);\r\n var disY = Math.abs(e.touches[1].pageY - e.touches[1].pageY);\r\n var dis = getDistance(disX, disY);\r\n\r\n start.dis = dis;\r\n } else {\r\n //console.log(\"single\");\r\n start.x = e.touches[0].clientX - curPhoto.offsetLeft;\r\n start.y = e.touches[0].clientY - curPhoto.offsetTop;\r\n start.time = new Date().getTime();\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n var touchmove = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (e.touches.length > 1) {\r\n var disX = Math.abs(e.touches[0].pageX - e.touches[1].pageX);\r\n var disY = Math.abs(e.touches[1].pageY - e.touches[1].pageY);\r\n var dis = getDistance(disX, disY);\r\n\r\n var width = parseInt(curPhoto.style.width);\r\n\r\n if (dis > start.dis) {\r\n //zoomout\r\n curPhoto.style.width = curPhoto.naturalWidth + \"px\";\r\n\r\n if (width + dis > curPhoto.naturalWidth) {\r\n curPhoto.style.width = curPhoto.naturalWidth + \"px\";\r\n isZoom = true;\r\n }\r\n } else {\r\n //zoomin\r\n curPhoto.style.width = width - dis + \"px\";\r\n\r\n if (width - dis < winWidth) {\r\n resetPos(curPhoto);\r\n }\r\n }\r\n } else {\r\n curPhoto.style.left = e.touches[0].clientX - start.x + \"px\";\r\n curPhoto.style.top = e.touches[0].clientY - start.y + \"px\";\r\n }\r\n };\r\n\r\n var touchend = function (e) {\r\n if (!isZoom) {\r\n if (parseInt(curPhoto.style.left) !== 0 || parseInt(curPhoto.style.top) !== 0) {\r\n setTimeout(function() {\r\n curPhoto.style.left = 0;\r\n curPhoto.style.top = 0;\r\n }, 300);\r\n }\r\n }\r\n\r\n if (new Date().getTime() - start.time < 100) {\r\n if (curPhoto.clientWidth > winWidth) {\r\n curPhoto.style.left = 0;\r\n curPhoto.style.top = 0;\r\n curPhoto.style.width = winWidth + \"px\";\r\n } else {\r\n slider.hide();\r\n }\r\n }\r\n };\r\n\r\n var createMask = function () {\r\n if (mask.ele) {\r\n mask.show();\r\n return;\r\n }\r\n\r\n this.mask = mask.ele = doc.createElement(\"div\");\r\n mask.ele.style.display = \"none\";\r\n mask.ele.style.position = \"fixed\";\r\n mask.ele.style.left = 0;\r\n mask.ele.style.top = 0;\r\n mask.ele.style.right = 0;\r\n mask.ele.style.bottom = 0;\r\n mask.ele.style.zIndex = defaults.zIndex;\r\n mask.ele.style.opacity = 0;\r\n mask.ele.style.webkitTransition = \"opacity .5s\";\r\n mask.ele.style.transition = \"opacity .5s\";\r\n mask.ele.style.webkitTransition = \"opacity .5s\";\r\n mask.ele.style.backgroundColor = \"rgba(0,0,0,.8)\";\r\n mask.ele.style.color = \"white\";\r\n \r\n doc.body.appendChild(mask.ele);\r\n\r\n mask.show = function () {\r\n mask.ele.style.display = \"block\";\r\n setTimeout(function() {\r\n mask.ele.style.opacity = 1;\r\n }, 30);\r\n };\r\n\r\n mask.hide = function () {\r\n mask.ele.style.opacity = 0;\r\n setTimeout(function() {\r\n mask.ele.style.display = \"none\";\r\n }, 600);\r\n };\r\n };\r\n\r\n var createSlider = function () {\r\n slider.ul.style.display = \"none\";\r\n slider.ul.style.position = \"fixed\";\r\n slider.ul.style.left = 0;\r\n slider.ul.style.top = 0;\r\n slider.ul.style.right = 0;\r\n slider.ul.style.bottom = 0;\r\n slider.ul.style.zIndex = defaults.zIndex;\r\n slider.ul.style.webkitTransition = \"opacity .5s\";\r\n slider.ul.style.transition = \"opacity .5s\";\r\n slider.ul.style.overflow = \"hidden\";\r\n slider.ul.style.width = win.innerWidth * defaults.photos.length + \"px\";\r\n doc.body.appendChild(slider.ul);\r\n\r\n slider.ul.addEventListener(\"click\", function () {\r\n slider.hide();\r\n });\r\n };\r\n\r\n var getDistance = function (x, y) {\r\n return Math.sqrt(x * x + y * y);\r\n };\r\n\r\n var append = function (photo) {\r\n var li = doc.createElement(\"li\");\r\n var img = doc.createElement(\"img\");\r\n\r\n li.style.position = \"relative\";\r\n li.style.width = winWidth + \"px\";\r\n li.style.height = winHeight + \"px\";\r\n li.style.cssFloat = \"left\";\r\n img.src = photo.src;\r\n img.naturalWidth = img.width;\r\n img.naturalHeight = img.height;\r\n img.style.position = \"absolute\";\r\n img.style.top = \"50%\";\r\n img.style.left = \"50%\";\r\n img.style.width = 0;\r\n img.style.maxWidth = \"none\";\r\n img.style.webkitTransition = \"width .5s, left .5s, top .5s\";\r\n img.style.transition = \"width .5s, left .5s, top .5s\";\r\n img.style.webkitTransform = \"translate(-50%, -50%)\";\r\n img.style.transform = \"translate(-50%, -50%)\";\r\n li.appendChild(img);\r\n slider.ul.appendChild(li);\r\n slider.photos.push(img);\r\n img.addEventListener(\"touchstart\", touchstart);\r\n img.addEventListener(\"touchmove\", touchmove);\r\n img.addEventListener(\"touchend\", touchend);\r\n }\r\n\r\n var resetPos = function (img) {\r\n img.style.top = 0;\r\n img.style.left = 0;\r\n img.style.width = winWidth + \"px\";\r\n isZoom = false;\r\n };\r\n\r\n FD.PhotoView = PhotoView;\r\n})(document, window);\r\n */"],"names":["window","FD","Error","showToast","msg","callback","sec","Echo","content","autoClose","onClosed","showWaiting","src","onOpened","showConfirm","options","defaults","summary","btnText","showTitle","showClose","dialogClassName","className","onSubmit","onCancel","showCancel","btns","extend","push","dialog","Dialog","width","join","wrap","$primary","box","querySelector","$cancel","onclick","close","dom","ready","isReady","callbacks","forEach","fn","completed","document","removeEventListener","readyState","documentElement","doScroll","setTimeout","addEventListener","get","selector","getAll","querySelectorAll","append","parentNode","newNode","appendChild","fragment","createDocumentFragment","div","createElement","innerHTML","toString","childNodes","prepend","temp","hasSiblings","length","insertBefore","before","after","nextSibling","trigger","type","target","dispatchEvent","CustomEvent","on","targets","findTarget","obj","e","some","item","call","slice","this","nodeType","isIOS","body","style","cursor","webkitTapHighlightColor","util","isInt","str","test","isNumber","isMobile","isIdCard","isEmail","myReg","maskMobile","mobile","substring","unique","arr","r","i","l","j","getQueryString","url","name","reg","RegExp","match","decodeURIComponent","replace","formatParams","data","noCache","encodeURIComponent","Date","getTime","parseQueryString","trim","split","indexOf","pair","htmlEncode","getRandom","n","m","undefined","Math","round","random","isWeiXin","navigator","userAgent","toLowerCase","ajax","setHeaders","key","headers","xhr","setRequestHeader","result","dataType","timeout","success","error","complete","Content-Type","params","toUpperCase","config","FormData","XMLHttpRequest","abort","onreadystatechange","status","JSON","parse","responseText","open","send","loadImage","img","Image","onload","onerror","cookie","sMainName","sSubName","exec","set","cookieName","cookieValue","minutes","path","domain","secure","expires","setTime","toGMTString","getOffset","elem","rect","getBoundingClientRect","left","scrollLeft","top","scrollTop","getJsonp","callbackName","getScript","head","getElementsByTagName","js","execScript","text","createTextNode","removeChild","a","b","deep","arguments","callee","hasOwnProperty","share","init","getHtml","load","_items","sina","tencent","wechat","qzone","renren","douban","friend","tieba","qq","mshare","keys","size","buffer","len","_bd_share_config","common","bdSnsKey","bdText","bdMini","bdMiniList","bdPic","bdStyle","tag","bdSize","script","initWechatShare","link","appid","wx-client-href","location","href","res","appId","setConfig","wx","updateAppMessageShareData","updateTimelineShareData","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareWeibo","onMenuShareQZone","isWechatShareInit","$desc","$link","$imgUrl","title","getAttribute","imgUrl","desc","cancel","debug","timestamp","nonceStr","signature","jsApiList","require","initTabs","eventType","wraps","initIndex","parseInt","tabs","items","classList","add","remove","curTab","curItem","setAttribute","initWechatAuth","openId","getWechatSubScribeStatus","getWechatOpenId","wait","code","getWechatUserInfo","wechatId","user","unionid","b64EncodeUnicode","btoa","p1","String","fromCharCode","b64DecodeUnicode","atob","map","c","charCodeAt","pageLock","overflow","pageUnLock","ua","flag","ios","isIphoneXFamily","ratio","devicePixelRatio","screen","height","showSubscribeDialog","maskClick","onCloseAfter","html","Uploader","fileEle","that","progress","onchange","_upload","prototype","formData","files","value","upload","onprogress","event","lengthComputable","loaded","total","toFixed","doc","_init","cssText","display","opacity","settings","maxWidth","minWidth","zIndex","autoShow","onInit","onCloseBefore","mask","level","sbj","cls","cont","contParentNode","$box","$mask","win","GotoTop","isShow","styles","setting","pageHeight","scrollHeight","onscroll","winHeight","fadeIn","fadeOut","scrollTo","Slider","speed","direction","duration","autoRun","showAction","showNav","showNumber","touch","onInited","onBefore","onAfter","$elem","$wrap","$items","$title","$number","$curNum","$totalNum","$prev","$next","$nav","center","count","current","runing","timer","timeId","isFirst","start","x","y","titles","checkTimes","checkHeight","every","$item","loadImages","checkFail","num","$imgs","$img","scroll","curNav","realIndex","_stopAndRestart","_scroll","_noAnimate","setStyle","delta","innerText","val","webkitTransform","transform","itemMaxHeight","rectObj","currHeight","currWidth","itemMaxWidth","minHeight","cloneNode","insertAdjacentElement","scrollPrev","scrollNext","_randerNav","changedTouches","clientX","clientY","preventDefault","dir","ban","end","abs","nodeName","contains","clearInterval","clearTimeout","_useAnimate","webkitTransition","transition","Drawer","offset","showMask","onShow","onHide","isRuning","visibility","css","right","bottom","classNames","maskClassName","transOpacity","position","closed","hide","show","toggle","lock","unlock","AutoComplete","input","delay","atleast","onInput","keyword","now","previous","fire","_initBox","pos","offsetWidth","offsetHeight","timeoutID","hm","s","isBtnToutiaoShow","getDate","dl","dt","dd","a_pro","a_free","data_pro","err_code","buttons","data_free","padding","backgroundColor","float","paddingRight","paddingLeft","open_url","is_limit","limit_text","inityykRecommend","renderHos","ele","WapUrl","HospitalName","getCont","Bool","Data","err","Array","Name","Title"],"mappings":"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"}