рдЕрд░реЗ!
рд╣рдо рдПрдХ рддрддреНрд╡ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди 3 рдбреА рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓реА рд╣реЛрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдкреВрд░реА рдбреНрд░реИрдЧ-рд▓реЗрдпрд░ рдХреЛ рд░рд┐рдкреЛрдЬрд┐рд╢рди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓ 3 рдбреА рд░реВрдЯ рдПрд▓рд┐рдореЗрдВрдЯ рдкрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдб рдкрд░ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред (рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ReactDnD.min.js рдХреЛ "./scripts/react-dnd-1.1.4/dist" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХреЛрдИ CDN рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рдХрд┐ ReactDnD рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ)ред
рдорджрдж рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DragPreview with wrong position example</title>
<script src="http://fb.me/react-with-addons-0.13.3.js"></script>
<script src="http://fb.me/JSXTransformer-0.13.3.js"></script>
<script src="scripts/react-dnd-1.1.4/dist/ReactDnD.min.js"></script>
<style>
.ReactDnDElement {
background: red;
overflow: hidden;
width: 200px;
height: 100px;
}
.ReactDnDElement .wrapper {
display: flex;
align-items: center;
width: 600px;
height: 100%;
transform: translate3d(-275px, 0, 0);
}
.ReactDnDElement .wrapper div {
width: 150px;
height: 50%;
}
.ReactDnDElement .wrapper div.green { background: green; }
.ReactDnDElement .wrapper div.blue { background: blue; }
.ReactDnDElement .wrapper div.yellow { background: yellow; }
.ReactDnDElement .wrapper div.magenta { background: magenta; }
</style>
</head>
<body>
<script type="text/jsx">
/* ReactDnDApp */
var ReactDnDApp = React.createClass({
render: function() {
return (
<ReactDnDElement></ReactDnDElement>
);
}
});
ReactDnDApp = ReactDnD.DragDropContext(ReactDnD.HTML5)(ReactDnDApp)
/* ReactDnDElement */
var ReactDnDElement = React.createClass({
render: function() {
return this.props.connectDragSource(
this.props.connectDragPreview(
<div className="ReactDnDElement">
<div className="wrapper">
<div className="green"></div>
<div className="blue"></div>
<div className="yellow"></div>
<div className="magenta"></div>
</div>
</div>
)
);
}
});
ReactDnDElement = ReactDnD.DragSource("dndElement", {
beginDrag: function(props) {
return {};
}
}, function(connect, monitor) {
return {
connectDragSource: connect.dragSource(),
connectDragPreview: connect.dragPreview()
};
})(ReactDnDElement);
/* RUN IT! */
React.render(React.createElement(ReactDnDApp), document.body);
</script>
</body>
</html>
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЗрд╢реА html5 рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдХреЗ рд╕рд╛рде рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рджреЗрд╢реА html5 рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдореЗрдердб рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдФрд░ рд╕рдлрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░реЛрдо рдФрд░ рдУрдкреЗрд░рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕рдлрд╛рд░реА рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛ рдФрд░ FIREFOX рдХреЗ рд▓рд┐рдП рд╣реИред
рдореИрдВрдиреЗ рдХреНрд░реЛрдорд┐рдпрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╣реИ: https://code.google.com/p/chromium/issues/detail?id=525604
рдЗрд╕ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЗрд░рд╛рджрд╛?
рдмреБрд░рд╛ рд╕рд╛рдорд╛рдиред рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рд╕рд┐рд░реНрдл рджреЛ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред
рдпрд╣ рдЙрди рднрдпрд╛рдирдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╕рдорд╛рди x
рдФрд░ y
рдорд╛рди dataTransfer.setDragImage
рдХрд┐рдП рдЧрдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░реЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдХрд╛ рдХреЛрдИ рднреА рдмрдЪреНрдЪрд╛ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдПрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреИрд╕реЗ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреБрдЫ рд╡реЗрдирд┐рд▓рд╛ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдкрд░ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ x
рдФрд░ y
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗрд╡рд▓ "рдХрд╛рдо" рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рддреЗ рд╣реИрдВ тАЭред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо _need_ рдЙрдиреНрд╣реЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдШрд╕реАрдЯ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рднреА рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рд╣реИред рдЬрдм рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдиреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рдЧрд╣рд░реЗ рдиреЗрд╕реНрдЯреЗрдб рдмрдЪреНрдЪреЗ рдмрд╛рдИрдВ рдпрд╛ рдКрдкрд░реА рдХрд┐рдирд╛рд░реЗ рдХреА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ setDragImage(node, x, y)
рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдЗрд╕реЗ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ! рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдбреНрд░реИрдЧ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдЕрдВрджрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдмрдЪреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк connectDragSource
_inside_ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЖрд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
.ReactDnDElement {
background: red;
overflow: hidden;
width: 200px;
height: 100px;
}
.ReactDnDElement .transform {
transform: translate3d(-275px, 0, 0);
width: 100%;
height: 100%;
}
.ReactDnDElement .wrapper {
display: flex;
align-items: center;
width: 600px;
height: 100%;
}
.ReactDnDElement .wrapper div {
width: 150px;
height: 50%;
}
.ReactDnDElement .wrapper div.green { background: green; }
.ReactDnDElement .wrapper div.blue { background: blue; }
.ReactDnDElement .wrapper div.yellow { background: yellow; }
.ReactDnDElement .wrapper div.magenta { background: magenta; }
var ReactDnDElement = React.createClass({
render: function() {
return (
<div className="ReactDnDElement">
<div className="transform">
{this.props.connectDragSource(
<div className="wrapper">
<div className="green"></div>
<div className="blue"></div>
<div className="yellow"></div>
<div className="magenta"></div>
</div>
)}
</div>
</div>
);
}
});
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЗрд╡рд▓ рдмрдЪреНрдЪреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдбреНрд░реИрдЧ рдЗрдореЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ HTML5 рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд┐рдПрдХреНрдЯ рдбреАрдПрдирдбреА рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, # 70 рдореЗрдВ рдПрдХ рдорд╛рдЙрд╕ рдмреИрдХрдПрдВрдб, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ setDragImage
рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдПрдХ рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ setDragImage
рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрд░реЗ! рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рдБ рдЧрдВрджрд╛ рд╕рд╛рдорд╛рди! рд╡реИрд╕реЗ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ ..
рд╡реИрд╕реЗ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ ..
рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ред HTML5 рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк IE5 рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдорд╛рдирдХреАрдХреГрдд рд╣реИ, рдФрд░ рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрд╕рдВрдЧрдд рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗрдм рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдмреЗрд╣рддрд░ рдирд╣реАрдВред рдХрд╕реНрдЯрдо рдорд╛рдЙрд╕ рдФрд░ рдЯрдЪ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рдмреЗрд╣рддрд░ рдЙрдкрд╛рдп рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдПрдХреНрдЯ рдбреАрдПрдирдбреА рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ред HTML5 рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк IE5 рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдорд╛рдирдХреАрдХреГрдд рд╣реИ, рдФрд░ рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрд╕рдВрдЧрдд рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗрдм рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдмреЗрд╣рддрд░ рдирд╣реАрдВред рдХрд╕реНрдЯрдо рдорд╛рдЙрд╕ рдФрд░ рдЯрдЪ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рдмреЗрд╣рддрд░ рдЙрдкрд╛рдп рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдПрдХреНрдЯ рдбреАрдПрдирдбреА рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред