Authored by htoooth

add

... ... @@ -17,7 +17,7 @@ exports.generateCaptcha = () => {
code: 200,
data: {
text: codeStr,
images: result.data.verifiedGraphicCode
images: `${result.data.verifiedGraphicCode}?imageView/2/w/240`
}
};
} else {
... ...
... ... @@ -24,7 +24,8 @@ module.exports = {
//api: 'http://api.yoho.cn/',
//service: 'http://service.yoho.cn/',
api: 'http://dev-api.yohops.com:9999/',
api: 'http://192.168.102.205:8080/gateway/',
//api: 'http://dev-api.yohops.com:9999/',
service: 'http://dev-service.yohops.com:9999/',
search: 'http://192.168.102.216:8080/yohosearch/',
... ...
<div class="captcha">
<div class="header"></div>
<div class="body"></div>
<div class="footer"></div>
<div class="tip"></div>
<div class="img-check">
<div class="img-check-header">
<span>请将下列图片点击翻转至正确方向</span>
<a class="img-check-refresh">换一批</a>
</div>
<div class="img-check-main">
<ul class="img-check-pics">
<li class="img-check-pic" data-val="0" style="background-image:url('{{images}}');"></li>
<li class="img-check-pic" data-val="0" style="background-image:url('{{images}}');"></li>
<li class="img-check-pic" data-val="0" style="background-image:url('{{images}}');"></li>
<li class="img-check-pic" data-val="0" style="background-image:url('{{images}}');"></li>
</ul>
</div>
</div>
... ...
... ... @@ -2,52 +2,146 @@
* Created by TaoHuang on 2016/12/12.
*/
var $ = require('yoho-jquery'),
tpl = require('hbs/common/captcha.hbs');
const Captcha = function(container, options) {
let optionDefault = {
useREM: null,
template: require('hbs/common/captcha.hbs'),
refreshURI: '/passport/imagesNode',
imgProcess: ''
};
var store = {
$ele: null,
clicks: [0, 0, 0, 0]
};
$.extend(this, optionDefault, options);
this.$container = $(container);
this.$imgCheck = null;
this.$imgPics = null;
this.picWidth = null;
exports.init = function($ele) {
store.$ele = $ele;
return this;
};
function _compute() {
Captcha.prototype = {
init: function() {
var self = this;
}
if (this.useREM) {
this.picWidth = this.useREM.picWidth / this.useREM.rootFontSize;
}
function _render(data) {
var $body = $(tpl(data));
this.refresh().done(function() {
self.bindEvents();
});
},
store.$ele.on('click', function() {
/**
* method: 绑定事件
*/
bindEvents: function() {
this.$container
.on('click.refresh', '.img-check-refresh', $.proxy(this.refresh, this))
.on('click.rotate', '.img-check-pic', $.proxy(this.rotateImg, this));
},
});
/**
* method: 渲染 dom
* @param obj data 渲染数据
* {
* imgSrc: 'src' //图片src
* }
*/
render: function(data) {
var self = this;
store.$ele.on('click', '.refresh', function() {
this.$container.html(this.template(data));
this.$imgPics = this.$container.find('.img-check-pic');
});
if (!this.useREM && !this.picWidth) {
this.picWidth = this.$imgPics.width();
}
store.$ele.empty().append($body);
}
this.$imgPics.each(function(index, elem) {
var $elem = $(elem);
var position = self.calcPosition($elem);
exports.text = function() {
$elem.css('backgroundPosition', position);
});
},
};
/**
* method: 计算 background-position
* @param num index img-check-pic 的index
* @param num count img-check-pic
*/
calcPosition: function($elem) {
var positionX, positionY;
var index = $elem.index();
var count = parseInt($elem.attr('data-val'), 10);
var unit = this.useREM ? 'rem' : 'px';
exports.genAsync = function() {
return $.getJSON('/passport/imagesNode').then(function(result) {
if (result.code === 200) {
_render({src: result.data.images});
} else {
_render({err: result.message});
}
});
};
count = count % 4;
positionX = -index * this.picWidth + unit;
positionY = -count * this.picWidth + unit;
return [positionX, positionY].join(' ');
},
/**
* Handler method: 刷新验证码
*/
refresh: function() {
const self = this;
let uri = this.refreshURI;
return $.get(uri)
.done(function(result) {
let src = result.data.images;
exports.checkAsync = function() {
return $.post('/passport/captcha/img', {
verifyCode: store.clicks.join('')
});
self.render({
images: src
});
})
.fail($.noop);
},
/**
* Handler method: 旋转图片
*/
rotateImg: function(event) {
var $pic = $(event.target);
var prevRotateCount = parseInt($pic.attr('data-val'), 10);
$pic.attr('data-val', prevRotateCount + 1);
$pic.css({
backgroundPosition: this.calcPosition($pic)
});
},
/**
* method: 获取结果
* @return string '0123'
*/
getResults: function() {
var result = [];
this.$container.find('.img-check-pic')
.each(function() {
var $elem = $(this);
var val = $elem.attr('data-val');
val = parseInt(val, 10);
result.push(val % 4);
});
return result.join('');
}
};
Captcha.prototype.construct = Captcha;
module.exports = Captcha;
... ...
/* ======================= *\
Module: 图片旋转验证
\* ======================= */
.img-check {
margin-top: 25px;
margin-bottom: 25px;
}
.img-check-header {
font-size: 13px;
line-height: 13px;
text-align: left;
margin-bottom: 10px;
color: #B0B0B0;
}
.img-check-refresh {
float: right;
font-size: 13px;
color: #ff1901;
cursor: pointer;
}
.img-check-pics {
display: inline-block;
width: 270px;
height: 62px;
padding: 0 0;
li {
float: left;
background-size: 240px 240px;
background: #575757 no-repeat;
width: 60px;
height: 60px;
border: 1px #e0e0e0 solid;
margin-right: 7px;
&:last-child {
margin-right: 0;
}
}
}
... ...
@import "slider";
@import "captcha";
... ...