| | |
| | title: "Popover Buttons" |
| | groupTitle: "Examples" |
| | sort: 9 |
| | |
| |
|
| | import { CodeSample } from "../../components/CodeSample.tsx"; |
| |
|
| | You can use the `showButtons` option to choose which buttons to show in the popover. The default value is `['next', 'previous', 'close']`. |
| |
|
| | <div id="driver-note" className="mb-5"> |
| | > **Note:** When using the `highlight` method to highlight a single element, the only button shown is the `close` |
| | button. However, you can use the `showButtons` option to show other buttons as well. But the buttons won't do |
| | anything. You will have to use the `onNextClick` and `onPreviousClick` callbacks to implement the functionality. |
| | </div> |
| | |
| | <div className='flex flex-col gap-1'> |
| | <CodeSample |
| | buttonText={"Show All Buttons"} |
| | config={{ |
| | showButtons: [ |
| | 'next', |
| | 'previous', |
| | 'close' |
| | ], |
| | }} |
| | tour={[ |
| | { |
| | element: '#driver-note', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | }, |
| | { |
| | element: '#driver-note p code:nth-child(4)', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | } |
| | ]} |
| | id={"code-sample"} |
| | client:load> |
| | ```js |
| | import { driver } from "driver.js"; |
| | import "driver.js/dist/driver.css"; |
| | |
| | const driverObj = driver({ |
| | showButtons: [ |
| | 'next', |
| | 'previous', |
| | 'close' |
| | ], |
| | steps: [ |
| | { |
| | element: '#first-element', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | }, |
| | { |
| | element: '#second-element', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | } |
| | ] |
| | }); |
| | |
| | driverObj.drive(); |
| | ``` |
| | </CodeSample> |
| | <CodeSample |
| | buttonText="No Close Button" |
| | config={{ |
| | showButtons: [ |
| | 'next', |
| | 'previous', |
| | ], |
| | }} |
| | tour={[ |
| | { |
| | element: '#driver-note', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | }, |
| | { |
| | element: '#driver-note code:nth-child(2)', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | } |
| | ]} |
| | id={"code-sample"} |
| | client:load /> |
| | <CodeSample |
| | buttonText="No Buttons (Use Arrows)" |
| | config={{ |
| | showButtons: [undefined], |
| | }} |
| | tour={[ |
| | { |
| | element: '#driver-note', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | }, |
| | { |
| | element: '#driver-note code:nth-child(2)', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description', |
| | side: 'bottom', |
| | align: 'start' |
| | } |
| | } |
| | ]} |
| | id={"code-sample"} |
| | client:load /> |
| | </div> |
| | |
| | ## Change Button Text |
| | |
| | You can also change the text of buttons using `nextBtnText`, `prevBtnText` and `doneBtnText` options. |
| | |
| | <div className='flex flex-col gap-1'> |
| | <CodeSample |
| | heading="Change Button Text" |
| | buttonText={"Change Button Text"} |
| | config={{ |
| | showProgress: true, |
| | nextBtnText: '—>', |
| | prevBtnText: '< |
| | doneBtnText: 'X', |
| | }} |
| | tour={[ |
| | { |
| | element: '#code-sample-3', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | }, |
| | { |
| | element: '#code-sample-3 code', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | } |
| | ]} |
| | id={"code-sample-3"} |
| | client:load> |
| | ```js |
| | import { driver } from "driver.js"; |
| | import "driver.js/dist/driver.css"; |
| |
|
| | const driverObj = driver({ |
| | nextBtnText: '—›', |
| | prevBtnText: '‹—', |
| | doneBtnText: '✕', |
| | showProgress: true, |
| | steps: [ |
| | // ... |
| | ] |
| | }); |
| |
|
| | driverObj.drive(); |
| | ``` |
| | </CodeSample> |
| | </div> |
| |
|
| | ## Event Handlers |
| |
|
| | You can use the `onNextClick`, `onPreviousClick` and `onCloseClick` callbacks to implement custom functionality when the user clicks on the next and previous buttons. |
| |
|
| | > Please note that when you configure these callbacks, the default functionality of the buttons will be disabled. You will have to implement the functionality yourself. |
| |
|
| | <CodeSample |
| | buttonText={"Show Example"} |
| | config={{}} |
| | tour={[ |
| | { |
| | element: '#logger-events', |
| | popover: { |
| | title: 'Events Logged', |
| | description: 'Look at your console for the events logged' |
| | } |
| | }, |
| | { |
| | element: '#code-sample-4 code', |
| | popover: { |
| | title: 'Popover Title', |
| | description: 'Popover Description' |
| | } |
| | } |
| | ]} |
| | id={"logger-events"} |
| | client:load> |
| | ```js |
| | import { driver } from "driver.js"; |
| | import "driver.js/dist/driver.css"; |
| |
|
| | const driverObj = driver({ |
| | onNextClick:() => { |
| | console.log('Next Button Clicked'); |
| | // Implement your own functionality here |
| | driverObj.moveNext(); |
| | }, |
| | onPrevClick:() => { |
| | console.log('Previous Button Clicked'); |
| | // Implement your own functionality here |
| | driverObj.movePrevious(); |
| | }, |
| | onCloseClick:() => { |
| | console.log('Close Button Clicked'); |
| | // Implement your own functionality here |
| | driverObj.destroy(); |
| | }, |
| | steps: [ |
| | // ... |
| | ] |
| | }); |
| |
|
| | driverObj.drive(); |
| | ``` |
| | </CodeSample> |
| |
|
| | ## Custom Buttons |
| |
|
| | You can add custom buttons using `onPopoverRender` callback. This callback is called before the popover is rendered. In the following example, we are adding a custom button that takes the user to the first step. |
| |
|
| |
|
| | <CodeSample |
| | buttonText={"Run Example"} |
| | config={{ |
| | prevBtnText: '← Previous', |
| | nextBtnText: 'Next →', |
| | doneBtnText: 'Done', |
| | showButtons: ['next', 'previous'], |
| | }} |
| | tour={[ |
| | { |
| | element: '#demo-hook-theme', |
| | popover: { |
| | align: 'start', |
| | side: 'left', |
| | title: 'More Control with Hooks', |
| | description: 'You can use onPopoverRender hook to modify the popover DOM. Here we are adding a custom button to the popover which takes the user to the first step.' |
| | } |
| | }, |
| | { |
| | element: 'h1', |
| | popover: { |
| | align: 'start', |
| | side: 'bottom', |
| | title: 'Style However You Want', |
| | description: 'You can use the default class names and override the styles or you can pass a custom class name to the popoverClass option either globally or per step.' |
| | } |
| | }, |
| | { |
| | element: 'p a', |
| | popover: { |
| | align: 'start', |
| | side: 'left', |
| | title: 'Style However You Want', |
| | description: 'You can use the default class names and override the styles or you can pass a custom class name to the popoverClass option either globally or per step.' |
| | } |
| | } |
| | ]} |
| | id={"demo-hook-theme"} |
| | client:load |
| | > |
| | ```js |
| | import { driver } from "driver.js"; |
| | import "driver.js/dist/driver.css"; |
| |
|
| | const driverObj = driver({ |
| | // Get full control over the popover rendering. |
| | // Here we are adding a custom button that takes |
| | // user to the first step. |
| | onPopoverRender: (popover, { config, state }) => { |
| | const firstButton = document.createElement("button"); |
| | firstButton.innerText = "Go to First"; |
| | popover.footerButtons.appendChild(firstButton); |
| |
|
| | firstButton.addEventListener("click", () => { |
| | driverObj.drive(0); |
| | }); |
| | }, |
| | steps: [ |
| | // .. |
| | ] |
| | }); |
| |
|
| | driverObj.drive(); |
| | ``` |
| | </CodeSample> |