diff --git a/components/modal/confirm.jsx b/components/modal/confirm.jsx index de72a817b9cf586d914f402055825efbda5b3db3..677fadfbdf716577a004d5f087dc0fb566ac08fe 100644 --- a/components/modal/confirm.jsx +++ b/components/modal/confirm.jsx @@ -1,11 +1,13 @@ import React from 'react'; import Dialog from './index'; let div; +let cssAnimation = require('css-animation'); export default function (props) { let d; props = props || {}; props.iconClassName = props.iconClassName || 'anticon-question-circle'; + props.bgAnimation = ' blur-enter blur-enter-active'; let width = props.width || 416; // 默认为 true,保持向下兼容 @@ -13,7 +15,37 @@ export default function (props) { props.okCancel = true; } + function bgBlur(b) { + //增加背景模糊; + function seeDom(callback) { + for (let i = 0; i < document.body.children.length; i++) { + let m = document.body.children[i]; + if (m.nodeName !== 'SCRIPT' && m.nodeName !== 'STYLE' && m.className.indexOf('ant-modal') < 0) { + callback.call(this, m); + } + } + } + + if (b) { + //cssAnimation(document.body, 'blur-enter') + seeDom((m)=> { + m.className += props.bgAnimation; + }); + } else { + seeDom((m)=> { + let rclass = /[\t\r\n\f]/g; + let _classname = (' ' + m.className + ' ').replace(' ' + rclass + ' ', ' '); + while (_classname.indexOf(props.bgAnimation) >= 0) { + _classname = _classname.replace(props.bgAnimation, ' '); + } + m.className = _classname.trim(); + cssAnimation(m, 'blur-leave'); + }); + } + } + function close() { + bgBlur(false); d.setState({ visible: false }); @@ -84,6 +116,7 @@ export default function (props) { div = document.createElement('div'); document.body.appendChild(div); } + bgBlur(true); React.render( { + m.className += this.props.bgAnimation; + }); + } else { + seeDom((m)=> { + let rclass = /[\t\r\n\f]/g; + let _classname = (' ' + m.className + ' ').replace(' ' + rclass + ' ', ' '); + while (_classname.indexOf(this.props.bgAnimation) >= 0) { + _classname = _classname.replace(this.props.bgAnimation, ' '); + } + m.className = _classname.trim(); + cssAnimation(m, 'blur-leave'); + }); + } + }, componentWillReceiveProps(nextProps) { if ('visible' in nextProps) { @@ -49,6 +81,7 @@ let AntModal = React.createClass({ newState.confirmLoading = false; } this.setState(newState); + this.bgBlur(nextProps.visible); } }, @@ -89,25 +122,25 @@ let AntModal = React.createClass({ } }); -AntModal.info = function(props) { +AntModal.info = function (props) { props.iconClassName = 'anticon-info-circle'; props.okCancel = false; return confirm(props); }; -AntModal.success = function(props) { +AntModal.success = function (props) { props.iconClassName = 'anticon-check-circle'; props.okCancel = false; return confirm(props); }; -AntModal.error = function(props) { +AntModal.error = function (props) { props.iconClassName = 'anticon-exclamation-circle'; props.okCancel = false; return confirm(props); }; -AntModal.confirm = function(props) { +AntModal.confirm = function (props) { props.okCancel = true; return confirm(props); }; diff --git a/style/core/motion.less b/style/core/motion.less index d90731dfe068b725f673495d4400e04af9ad031f..d059adc6d55d5eb57c03905cbe6b934faef83b4e 100644 --- a/style/core/motion.less +++ b/style/core/motion.less @@ -29,3 +29,4 @@ @import "motion/slide"; @import "motion/swing"; @import "motion/zoom"; +@import "motion/blur"; diff --git a/style/core/motion/blur.less b/style/core/motion/blur.less new file mode 100644 index 0000000000000000000000000000000000000000..ea71801c9394a3a4558d354ef697ee8ad8b84b89 --- /dev/null +++ b/style/core/motion/blur.less @@ -0,0 +1,40 @@ +.blur-enter, .blur-appear { + .motion-common(); + animation-timing-function: @ease-in-out; + animation-play-state: paused; +} + +.blur-leave { + filter:blur(4px); + .motion-common(); + animation-timing-function: @ease-in-out; + animation-play-state: paused; +} + +.blur-enter.blur-enter-active, .blur-appear.blur-appear-active { + animation-name: blurIn; + animation-play-state: running; +} + +.blur-leave.blur-leave-active { + animation-name: blurOut; + animation-play-state: running; +} + +@keyframes blurIn { + 0% { + filter: blur(0);git + } + 100% { + filter: blur(4px); + } +} + +@keyframes blurOut { + 0% { + filter: blur(4px); + } + 100% { + filter: blur(0); + } +} diff --git a/style/core/motion/zoom.less b/style/core/motion/zoom.less index 27c8b7d33882cf3da276b194a7804d824a03b785..3fef41068279bb8473bc4b732ed92c2e239fec81 100644 --- a/style/core/motion/zoom.less +++ b/style/core/motion/zoom.less @@ -19,32 +19,19 @@ @keyframes zoomIn { 0% { opacity: 0; - filter: blur(20px); transform: scale(0); } - 50%{ - filter: blur(5px); - } 100% { - filter: blur(0); transform: scale(1); } } @keyframes zoomOut { 0% { - filter: blur(0); transform: scale(1); } - 50%{ - filter: blur(5px); - } - 90%{ - opacity: 0.03; - } 100% { opacity: 0; - filter: blur(20px); transform: scale(0); } }