html模拟激光,HTML5 创意表单输入验证动效 - 激光射线

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var editProfileError = $(document.querySelector('.error-message'));

// Handle validation errors

if (editProfileError.length) {

triggerLasers();

}

$(document.getElementById('error-trigger')).click(triggerLasers);

// FIRE!

function triggerLasers() {

console.log('pew pew');

var errorDelay = 250;

$('.error-line').remove();

// select required fields that are currently invalid

$('input:required:invalid').each(function() {

var error = $(this);

setTimeout(function() {

linkErrors(error);

}, errorDelay);

errorDelay += 250;

});

}

// Show fields with validation errors

function linkErrors(error) {

var linkLine = $(document.createElement('div')).addClass('error-line').appendTo('body'),

editProfileErrorOffset = editProfileError.offset(),

errorOffset = error.offset();

editProfileErrorOffset.left += editProfileError.outerWidth();

editProfileErrorOffset.top += editProfileError.outerHeight();

var originX = editProfileErrorOffset.left,

originY = editProfileErrorOffset.top - 2,

lineLength = Math.sqrt((errorOffset.left - originX) * (errorOffset.left - originX) + (errorOffset.top - originY) * (errorOffset.top - originY)),

angle = 180 / 3.1415 * Math.acos((errorOffset.top - originY) / lineLength),

inverseAngle = 180 - angle;

// invert angle if to the right of origin

if (errorOffset.left > originX) {

angle *= -1;

}

// set linkLine origin

linkLine.css({

'top': editProfileErrorOffset.top,

'left': editProfileErrorOffset.left

});

// draw line from vague error message to field with error

linkLine.css({

'height': lineLength,

'-webkit-transform': 'rotate(' + angle + 'deg)',

'-moz-transform': 'rotate(' + angle + 'deg)',

'-o-transform': 'rotate(' + angle + 'deg)',

'-ms-transform': 'rotate(' + angle + 'deg)'

});

// flip line, hide and add error class to field with error

setTimeout(function() {

linkLine.css({

'top': errorOffset.top,

'left': errorOffset.left,

'height': 0,

'-webkit-transform': 'rotate(' + inverseAngle + 'deg)',

'-moz-transform': 'rotate(' + inverseAngle + 'deg)',

'-o-transform': 'rotate(' + inverseAngle + 'deg)',

'-ms-transform': 'rotate(' + inverseAngle + 'deg)'

});

error.addClass('error');

error.focus(function() {

$(this).removeClass('error');

});

}, 300);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值