123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- import { MessageBox } from 'element-ui'
- // 错误弹窗
- export function showError (msg, title = 'Error') {
- MessageBox.confirm(msg, title, {
- center: true,
- showCancelButton: false,
- showConfirmButton: false,
- callback () {}
- })
- }
- /**
- * 判断系统||浏览器中英文
- * 对于不支持的浏览器 一律默认为 中文
- */
- export function getLanguage () {
- var language = (navigator.language || navigator.browserLanguage).toLowerCase()
- var locale = 'zh'
- if (language.indexOf('en') > -1) {
- locale = 'en'
- } else {
- locale = 'zh'
- }
- return locale
- }
- /**
- * 获取Url上指定参数
- * @param {String} name 参数名
- */
- export function getUrlParam (name) {
- var reg = new RegExp('[?&]' + name + '=([^&#?]*)(&|#|$)')
- var r = window.location.href.match(reg)
- return r ? r[1] : null
- }
- export function funParabola (element, target, options) {
- var defaults = {
- speed: 166.67, // 每帧移动的像素大小,每帧(对于大部分显示屏)大约16~17毫秒
- curvature: 0.001, // 实际指焦点到准线的距离,你可以抽象成曲率,这里模拟扔物体的抛物线,因此是开口向下的
- progress: function () {
- },
- complete: function () {
- }
- }
- var params = {}
- options = options || {}
- for (var key in defaults) {
- params[key] = options[key] || defaults[key]
- }
- var exports = {
- mark: function () {
- return this
- },
- position: function () {
- return this
- },
- move: function () {
- return this
- },
- init: function () {
- return this
- }
- }
- // 代替requestAnimationFrame,防止浏览器tab切换出去不执行
- var animationPolyfill = function (callback) {
- setTimeout(callback, 1000 / 60)
- }
- /** 确定移动的方式
- * IE6-IE8 是margin位移
- * IE9+使用transform
- */
- var moveStyle = 'margin'; var testDiv = document.createElement('div')
- if ('oninput' in testDiv) {
- ['', 'ms', 'webkit'].forEach(function (prefix) {
- var transform = prefix + (prefix ? 'T' : 't') + 'ransform'
- if (transform in testDiv.style) {
- moveStyle = transform
- }
- })
- }
- // 根据两点坐标以及曲率确定运动曲线函数(也就是确定a, b的值)
- /** 公式: y = a*x*x + b*x + c;
- */
- var a = params.curvature
- var b = 0
- // var c = 0
- // 是否执行运动的标志量
- var flagMove = true
- if (element && target && element.nodeType === 1 && target.nodeType === 1) {
- var rectElement = {}; var rectTarget = {}
- // 移动元素的中心点位置,目标元素的中心点位置
- var centerElement = {}; var centerTarget = {}
- // 目标元素的坐标位置
- var coordElement = {}; var coordTarget = {}
- // 标注当前元素的坐标
- exports.mark = function () {
- if (flagMove === false) return this
- if (typeof coordElement.x === 'undefined') this.position()
- element.setAttribute('data-center', [coordElement.x, coordElement.y].join())
- target.setAttribute('data-center', [coordTarget.x, coordTarget.y].join())
- return this
- }
- exports.position = function () {
- if (flagMove === false) return this
- var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop
- // 初始位置
- if (moveStyle === 'margin') {
- element.style.marginLeft = element.style.marginTop = '0px'
- } else {
- element.style[moveStyle] = 'translate(0, 0)'
- }
- // 四边缘的坐标
- rectElement = element.getBoundingClientRect()
- rectTarget = target.getBoundingClientRect()
- // 移动元素的中心点坐标
- centerElement = {
- x: rectElement.left + (rectElement.right - rectElement.left) / 2 + scrollLeft,
- y: rectElement.top + (rectElement.bottom - rectElement.top) / 2 + scrollTop
- }
- // centerElement = {
- // x: rectElement.left + scrollLeft,
- // y: rectElement.top + scrollTop
- // };
- // 目标元素的中心点位置
- centerTarget = {
- x: rectTarget.left + scrollLeft + (rectTarget.right - rectTarget.left) / 2,
- y: rectTarget.top + scrollTop + (rectTarget.bottom - rectTarget.top) / 2
- }
- // 转换成相对坐标位置
- coordElement = {
- x: 0,
- y: 0
- }
- coordTarget = {
- x: -1 * (centerElement.x - centerTarget.x),
- y: -1 * (centerElement.y - centerTarget.y)
- }
- /*
- * 因为经过(0, 0), 因此c = 0
- * 于是:
- * y = a * x*x + b*x;
- * y1 = a * x1*x1 + b*x1;
- * y2 = a * x2*x2 + b*x2;
- * 利用第二个坐标:
- * b = (y2+ a*x2*x2) / x2
- */
- // 于是
- b = (coordTarget.y - a * coordTarget.x * coordTarget.x) / coordTarget.x
- return this
- }
- // 按照这个曲线运动
- exports.move = function () {
- // 如果曲线运动还没有结束,不再执行新的运动
- if (flagMove === false) return this
- var startx = 0; var rate = coordTarget.x > 0 ? 1 : -1
- var step = function () {
- // 切线 y'=2ax+b
- var tangent = 2 * a * startx + b // = y / x
- // y*y + x*x = speed
- // (tangent * x)^2 + x*x = speed
- // x = Math.sqr(speed / (tangent * tangent + 1));
- startx = startx + rate * Math.sqrt(params.speed / (tangent * tangent + 1))
- // 防止过界
- if ((rate === 1 && startx > coordTarget.x) || (rate === -1 && startx < coordTarget.x)) {
- startx = coordTarget.x
- }
- var x = startx; var y = a * x * x + b * x
- // 标记当前位置,这里有测试使用的嫌疑,实际使用可以将这一行注释
- element.setAttribute('data-center', [Math.round(x), Math.round(y)].join())
- // x, y目前是坐标,需要转换成定位的像素值
- if (moveStyle === 'margin') {
- element.style.marginLeft = x + 'px'
- element.style.marginTop = y + 'px'
- } else {
- element.style[moveStyle] = 'translate(' + [x + 'px', y + 'px'].join() + ')'
- }
- if (startx !== coordTarget.x) {
- params.progress(x, y)
- // window.requestAnimationFrame(step);
- animationPolyfill(step)
- } else {
- // 运动结束,回调执行
- params.complete()
- flagMove = true
- }
- }
- window.requestAnimationFrame(step)
- // animationPolyfill(step)
- flagMove = false
- return this
- }
- // 初始化方法
- exports.init = function () {
- this.position().mark().move()
- }
- }
- return exports
- }
- export var Cookie = {
- setCookie (name, value) {
- var Days = 7
- var exp = new Date()
- exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
- exp.setTime(exp.getTime() + 60 * 1000)
- if (window.location.port === '8080' || /^test-|\.webdev2\./.test(window.location.host)) {
- document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
- } else {
- document.cookie = name + '=' + escape(value) + ';domain=.eosget.io;path=/;expires=' + exp.toGMTString()
- }
- },
- getCookie (name) {
- var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
- var arr = document.cookie.match(reg)
- if (arr) {
- return unescape(arr[2])
- } else {
- return null
- }
- },
- delCookie (name) {
- var str1 = name + '=;domain=.eosget.io;path=/'
- str1 += ';expires=' + (new Date(0)).toGMTString()
- document.cookie = str1
- var str2 = name + '=;path=/'
- str2 += ';expires=' + (new Date(0)).toGMTString()
- document.cookie = str2
- },
- setLangCookie (name, value) {
- var Days = 7
- var exp = new Date()
- exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)
- exp.setTime(exp.getTime() + 60 * 1000)
- document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()
- document.cookie = name + '=' + escape(value) + ';domain=.eosget.io;path=/;expires=' + exp.toGMTString()
- }
- }
|