提交 9d5bc12d 编写于 作者: J jljsj

add modal bg blur, remove motion blur

上级 3474caac
import React from 'react'; import React from 'react';
import Dialog from './index'; import Dialog from './index';
let div; let div;
let cssAnimation = require('css-animation');
export default function (props) { export default function (props) {
let d; let d;
props = props || {}; props = props || {};
props.iconClassName = props.iconClassName || 'anticon-question-circle'; props.iconClassName = props.iconClassName || 'anticon-question-circle';
props.bgAnimation = ' blur-enter blur-enter-active';
let width = props.width || 416; let width = props.width || 416;
// 默认为 true,保持向下兼容 // 默认为 true,保持向下兼容
...@@ -13,7 +15,37 @@ export default function (props) { ...@@ -13,7 +15,37 @@ export default function (props) {
props.okCancel = true; 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() { function close() {
bgBlur(false);
d.setState({ d.setState({
visible: false visible: false
}); });
...@@ -84,6 +116,7 @@ export default function (props) { ...@@ -84,6 +116,7 @@ export default function (props) {
div = document.createElement('div'); div = document.createElement('div');
document.body.appendChild(div); document.body.appendChild(div);
} }
bgBlur(true);
React.render(<Dialog React.render(<Dialog
prefixCls="ant-modal" prefixCls="ant-modal"
......
...@@ -3,13 +3,15 @@ import Dialog from 'rc-dialog'; ...@@ -3,13 +3,15 @@ import Dialog from 'rc-dialog';
import { Dom } from 'rc-util'; import { Dom } from 'rc-util';
import confirm from './confirm'; import confirm from './confirm';
let cssAnimation = require('css-animation');
function noop() { function noop() {
} }
let mousePosition; let mousePosition;
let mousePositionEventBinded; let mousePositionEventBinded;
let AntModal = React.createClass({ let AntModal = React.createClass({
getDefaultProps() { getDefaultProps() {
return { return {
prefixCls: 'ant-modal', prefixCls: 'ant-modal',
...@@ -17,7 +19,8 @@ let AntModal = React.createClass({ ...@@ -17,7 +19,8 @@ let AntModal = React.createClass({
onCancel: noop, onCancel: noop,
width: 520, width: 520,
transitionName: 'zoom', transitionName: 'zoom',
maskAnimation: 'fade' maskAnimation: 'fade',
bgAnimation: ' blur-enter blur-enter-active',
}; };
}, },
...@@ -30,6 +33,7 @@ let AntModal = React.createClass({ ...@@ -30,6 +33,7 @@ let AntModal = React.createClass({
handleCancel() { handleCancel() {
this.props.onCancel(); this.props.onCancel();
this.bgBlur(false);
}, },
handleOk() { handleOk() {
...@@ -38,6 +42,34 @@ let AntModal = React.createClass({ ...@@ -38,6 +42,34 @@ let AntModal = React.createClass({
}); });
this.props.onOk(); this.props.onOk();
}, },
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 += 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) { componentWillReceiveProps(nextProps) {
if ('visible' in nextProps) { if ('visible' in nextProps) {
...@@ -49,6 +81,7 @@ let AntModal = React.createClass({ ...@@ -49,6 +81,7 @@ let AntModal = React.createClass({
newState.confirmLoading = false; newState.confirmLoading = false;
} }
this.setState(newState); this.setState(newState);
this.bgBlur(nextProps.visible);
} }
}, },
...@@ -89,25 +122,25 @@ let AntModal = React.createClass({ ...@@ -89,25 +122,25 @@ let AntModal = React.createClass({
} }
}); });
AntModal.info = function(props) { AntModal.info = function (props) {
props.iconClassName = 'anticon-info-circle'; props.iconClassName = 'anticon-info-circle';
props.okCancel = false; props.okCancel = false;
return confirm(props); return confirm(props);
}; };
AntModal.success = function(props) { AntModal.success = function (props) {
props.iconClassName = 'anticon-check-circle'; props.iconClassName = 'anticon-check-circle';
props.okCancel = false; props.okCancel = false;
return confirm(props); return confirm(props);
}; };
AntModal.error = function(props) { AntModal.error = function (props) {
props.iconClassName = 'anticon-exclamation-circle'; props.iconClassName = 'anticon-exclamation-circle';
props.okCancel = false; props.okCancel = false;
return confirm(props); return confirm(props);
}; };
AntModal.confirm = function(props) { AntModal.confirm = function (props) {
props.okCancel = true; props.okCancel = true;
return confirm(props); return confirm(props);
}; };
......
...@@ -29,3 +29,4 @@ ...@@ -29,3 +29,4 @@
@import "motion/slide"; @import "motion/slide";
@import "motion/swing"; @import "motion/swing";
@import "motion/zoom"; @import "motion/zoom";
@import "motion/blur";
.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);
}
}
...@@ -19,32 +19,19 @@ ...@@ -19,32 +19,19 @@
@keyframes zoomIn { @keyframes zoomIn {
0% { 0% {
opacity: 0; opacity: 0;
filter: blur(20px);
transform: scale(0); transform: scale(0);
} }
50%{
filter: blur(5px);
}
100% { 100% {
filter: blur(0);
transform: scale(1); transform: scale(1);
} }
} }
@keyframes zoomOut { @keyframes zoomOut {
0% { 0% {
filter: blur(0);
transform: scale(1); transform: scale(1);
} }
50%{
filter: blur(5px);
}
90%{
opacity: 0.03;
}
100% { 100% {
opacity: 0; opacity: 0;
filter: blur(20px);
transform: scale(0); transform: scale(0);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册