If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React from 'react';
import { IPopoverOptions, Popover } from 'devextreme-react/popover';
const animationConfig: IPopoverOptions['animation'] = {
show: {
type: 'pop',
from: {
scale: 0,
},
to: {
scale: 1,
},
},
hide: {
type: 'fade',
from: 1,
to: 0,
},
};
export default function App() {
return (
<div className="dx-fieldset form">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value-static">
<p>
<span id="subject1">Google AdWords Strategy </span>
(<a id="link1">details</a>)
</p>
<Popover
target="#link1"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
>
Make final decision on whether we are going to
increase our Google AdWord spend based
on our 2013 marketing plan.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With title</div>
<div className="dx-field-value-static">
<p>
<span id="subject2">Rollout of New Website and Marketing Brochures </span>
(<a id="link2">details</a>)
</p>
<Popover
target="#link2"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
showTitle={true}
title="Details"
>
The designs for new brochures and
website have been approved.
Launch date is set for Feb 28.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With animation</div>
<div className="dx-field-value-static">
<p>
<span id="subject3">Create 2012 Sales Report </span>
(<a id="link3">details</a>)
</p>
<Popover
target="#link3"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
animation={animationConfig}
>
2012 Sales Report has to be completed
so we can determine if major changes
are required to sales strategy.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With overlay</div>
<div className="dx-field-value-static">
<p>
<span id="subject4">Website Re-Design Plan </span>
(<a id="link4">more</a>)
</p>
<Popover
target="#link4"
showEvent="click"
position="top"
width={300}
shading={true}
shadingColor="rgba(0, 0, 0, 0.5)"
>
The changes in our brochure designs for 2013 require
us to update key areas of our website.
</Popover>
</div>
</div>
</div>
);
}
xxxxxxxxxx
import React from 'react';
import { Popover } from 'devextreme-react/popover';
const animationConfig = {
show: {
type: 'pop',
from: {
scale: 0,
},
to: {
scale: 1,
},
},
hide: {
type: 'fade',
from: 1,
to: 0,
},
};
export default function App() {
return (
<div className="dx-fieldset form">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value-static">
<p>
<span id="subject1">Google AdWords Strategy </span>(<a id="link1">details</a>)
</p>
<Popover
target="#link1"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
>
Make final decision on whether we are going to increase our Google AdWord spend based on
our 2013 marketing plan.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With title</div>
<div className="dx-field-value-static">
<p>
<span id="subject2">Rollout of New Website and Marketing Brochures </span>(
<a id="link2">details</a>)
</p>
<Popover
target="#link2"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
showTitle={true}
title="Details"
>
The designs for new brochures and website have been approved. Launch date is set for Feb
28.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With animation</div>
<div className="dx-field-value-static">
<p>
<span id="subject3">Create 2012 Sales Report </span>(<a id="link3">details</a>)
</p>
<Popover
target="#link3"
showEvent="mouseenter"
hideEvent="mouseleave"
position="top"
width={300}
animation={animationConfig}
>
2012 Sales Report has to be completed so we can determine if major changes are required
to sales strategy.
</Popover>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With overlay</div>
<div className="dx-field-value-static">
<p>
<span id="subject4">Website Re-Design Plan </span>(<a id="link4">more</a>)
</p>
<Popover
target="#link4"
showEvent="click"
position="top"
width={300}
shading={true}
shadingColor="rgba(0, 0, 0, 0.5)"
>
The changes in our brochure designs for 2013 require us to update key areas of our
website.
</Popover>
</div>
</div>
</div>
);
}
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.form a {
cursor: pointer;
white-space: nowrap;
border-bottom: 1px dashed;
text-decoration: none;
}
.form p {
margin: 0;
}
#link4 {
border-bottom-style: solid;
}
Attach Popover to a Page Element
Popover displays an arrow that points to a page element. To specify the element, set the target property to a CSS selector. In this demo, target elements are selected by id
.
You can use the position property to position Popover relative to the target element. If you do not specify this property, Popover is displayed under the element.
Show and Hide Popover
The showEvent and hideEvent properties allow you to show and hide Popover in response to certain events. These properties can accept one or multiple names of DOM events or DevExtreme UI events separated by a space character.
You can also specify a delay before the events occur. Set the showEvent and hideEvent properties to an object with the name (one or multiple event names) and delay properties.
In this demo, the last Popover appears when you click its target element because its showEvent property is set to the DevExtreme dxclick event. Other Popover components appear and disappear on the mouseenter and mouseleave DOM events.
Specify Content
Popover consists of content area and a title. You can specify static content in the HTML markup as shown in this demo. If Popover should display dynamic content, use the contentTemplate property to specify a template. To display the title, enable the showTitle property and set the title property to the title text.
Animate Popover
If you want to show and hide Popover with animation effects, assign an object with the show and hide fields to the animation property. Each of these fields accepts an object that configures the animation type and other properties. In this demo, Popover appears with a pop-up animation and fades away when it disappears.
Shade the Background
You can show Popover with a shaded background. To do this, enable the shading property and specify a shadingColor.