89 lines
1.9 KiB
Vue
89 lines
1.9 KiB
Vue
|
<script>
|
||
|
import Trigger from '../index'
|
||
|
import '../assets/index.less'
|
||
|
import './point.less'
|
||
|
const builtinPlacements = {
|
||
|
topLeft: {
|
||
|
points: ['tl', 'tl'],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
data () {
|
||
|
return {
|
||
|
action: 'click',
|
||
|
mouseEnterDelay: 0,
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
onActionChange ({ target: { value }}) {
|
||
|
this.action = value
|
||
|
},
|
||
|
|
||
|
onDelayChange ({ target: { value }}) {
|
||
|
this.mouseEnterDelay = Number(value) || 0
|
||
|
},
|
||
|
},
|
||
|
|
||
|
render () {
|
||
|
const { action, mouseEnterDelay } = this
|
||
|
const innerTrigger = (
|
||
|
<div
|
||
|
style={{ padding: '20px', background: 'rgba(0, 255, 0, 0.3)' }}
|
||
|
>
|
||
|
This is popup
|
||
|
</div>
|
||
|
)
|
||
|
return (
|
||
|
<div>
|
||
|
<label>
|
||
|
Trigger type:
|
||
|
{' '}
|
||
|
<select value={action} onChange={this.onActionChange}>
|
||
|
<option>click</option>
|
||
|
<option>hover</option>
|
||
|
<option>contextmenu</option>
|
||
|
</select>
|
||
|
</label>
|
||
|
|
||
|
{' '}
|
||
|
|
||
|
{action === 'hover' && <label>
|
||
|
Mouse enter delay:
|
||
|
{' '}
|
||
|
<input type='text' value={mouseEnterDelay} onChange={this.onDelayChange} />
|
||
|
</label>}
|
||
|
|
||
|
<div style={{ margin: '50px' }}>
|
||
|
<Trigger
|
||
|
popupPlacement='topLeft'
|
||
|
action={[action]}
|
||
|
popupAlign={{
|
||
|
overflow: {
|
||
|
adjustX: 1,
|
||
|
adjustY: 1,
|
||
|
},
|
||
|
}}
|
||
|
mouseEnterDelay={mouseEnterDelay}
|
||
|
popupClassName='point-popup'
|
||
|
builtinPlacements={builtinPlacements}
|
||
|
popup={innerTrigger}
|
||
|
alignPoint
|
||
|
>
|
||
|
<div
|
||
|
style={{
|
||
|
border: '1px solid red',
|
||
|
padding: '100px 0',
|
||
|
textAlign: 'center',
|
||
|
}}
|
||
|
>
|
||
|
Interactive region
|
||
|
</div>
|
||
|
</Trigger>
|
||
|
</div>
|
||
|
</div>
|
||
|
)
|
||
|
},
|
||
|
}
|
||
|
</script>
|