ant-design-vue/components/vc-trigger/demo/simple.vue

253 lines
6.2 KiB
Vue

<script>
import Trigger from '../index';
import '../assets/index.less';
import { Input, Button } from 'ant-design-vue';
function getPopupAlign(state) {
return {
offset: [state.offsetX, state.offsetY],
overflow: {
adjustX: 1,
adjustY: 1,
},
};
}
const builtinPlacements = {
left: {
points: ['cr', 'cl'],
},
right: {
points: ['cl', 'cr'],
},
top: {
points: ['bc', 'tc'],
},
bottom: {
points: ['tc', 'bc'],
},
topLeft: {
points: ['bl', 'tl'],
},
topRight: {
points: ['br', 'tr'],
},
bottomRight: {
points: ['tr', 'br'],
},
bottomLeft: {
points: ['tl', 'bl'],
},
};
function preventDefault(e) {
e.preventDefault();
}
function getPopupContainer(trigger) {
return trigger.parentNode;
}
export default {
data() {
return {
mask: false,
maskClosable: false,
placement: 'right',
trigger: {
hover: 1,
},
offsetX: undefined,
offsetY: undefined,
transitionName: 'rc-trigger-popup-zoom',
destroyPopupOnHide: false,
destroyed: false,
};
},
methods: {
setState(state, callback) {
Object.assign(this.$data, state);
this.$nextTick(() => {
callback && callback();
});
},
onPlacementChange(e) {
this.setState({
placement: e.target.value,
});
},
onTransitionChange(e) {
this.setState({
transitionName: e.target.checked ? e.target.value : '',
});
},
onTriggerChange(e) {
const trigger = Object.assign({}, this.$data.trigger);
if (e.target.checked) {
trigger[e.target.value] = 1;
} else {
delete trigger[e.target.value];
}
this.setState({
trigger,
});
},
onOffsetXChange(e) {
const targetValue = e.target.value;
this.setState({
offsetX: targetValue || undefined,
});
},
onOffsetYChange(e) {
const targetValue = e.target.value;
this.setState({
offsetY: targetValue || undefined,
});
},
onVisibleChange(visible) {
console.log('tooltip', visible);
},
onMask(e) {
this.setState({
mask: e.target.checked,
});
},
onMaskClosable(e) {
this.setState({
maskClosable: e.target.checked,
});
},
destroy() {
this.setState({
destroyed: true,
});
},
handleDestroyPopupOnHide(e) {
this.setState({
destroyPopupOnHide: e.target.checked,
});
},
},
render() {
const state = this.$data;
const trigger = state.trigger;
if (state.destroyed) {
return null;
}
return (
<div>
<div style={{ margin: '10px 20px' }}>
<label>
placement:
<select value={state.placement} onChange={this.onPlacementChange}>
<option>right</option>
<option>left</option>
<option>top</option>
<option>bottom</option>
<option>topLeft</option>
<option>topRight</option>
<option>bottomRight</option>
<option>bottomLeft</option>
</select>
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>
<a-checkbox
value="rc-trigger-popup-zoom"
onChange={this.onTransitionChange}
checked={state.transitionName === 'rc-trigger-popup-zoom'}
/>
transitionName
</label>
&nbsp;&nbsp;&nbsp;&nbsp; trigger:
<label>
<a-checkbox value="hover" checked={!!trigger.hover} onChange={this.onTriggerChange} />
hover
</label>
<label>
<a-checkbox value="focus" checked={!!trigger.focus} onChange={this.onTriggerChange} />
focus
</label>
<label>
<a-checkbox value="click" checked={!!trigger.click} onChange={this.onTriggerChange} />
click
</label>
<label>
<a-checkbox
value="contextMenu"
checked={!!trigger.contextMenu}
onChange={this.onTriggerChange}
/>
contextMenu
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>
<a-checkbox
checked={!!state.destroyPopupOnHide}
onChange={this.handleDestroyPopupOnHide}
/>
destroyPopupOnHide
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>
<a-checkbox checked={!!state.mask} onChange={this.onMask} />
mask
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>
<a-checkbox checked={!!state.maskClosable} onChange={this.onMaskClosable} />
maskClosable
</label>
<br />
<label>
offsetX:
<Input type="text" onChange={this.onOffsetXChange} style={{ width: '50px' }} />
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>
offsetY:
<Input type="text" onChange={this.onOffsetYChange} style={{ width: '50px' }} />
</label>
&nbsp;&nbsp;&nbsp;&nbsp;
<Button onClick={this.destroy}>destroy</Button>
</div>
<div style={{ margin: '100px', position: 'relative' }}>
<Trigger
getPopupContainer={undefined && getPopupContainer}
popupAlign={getPopupAlign(state)}
popupPlacement={state.placement}
destroyPopupOnHide={state.destroyPopupOnHide}
// zIndex={40}
mask={state.mask}
maskClosable={state.maskClosable}
// maskAnimation="fade"
// mouseEnterDelay={0.1}
// mouseLeaveDelay={0.1}
action={Object.keys(state.trigger)}
builtinPlacements={builtinPlacements}
popupAnimation={state.transitionName}
>
<div
slot="popup"
style={{ border: '1px solid red', padding: '10px', background: 'white' }}
>
i am a popup
</div>
<a-button onClick={preventDefault}>trigger</a-button>
</Trigger>
</div>
</div>
);
},
};
</script>