SetPositionPage.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div ref="main" class="main" @click="close">
  3. <div class="clickStop" @click.stop>
  4. <Window @close="close">
  5. <template slot="header">
  6. Установить позицию
  7. </template>
  8. <div class="slider">
  9. <el-slider v-model="sliderValue" :max="sliderMax" :format-tooltip="formatTooltip"></el-slider>
  10. </div>
  11. </Window>
  12. </div>
  13. </div>
  14. </template>
  15. <script>
  16. //-----------------------------------------------------------------------------
  17. import Vue from 'vue';
  18. import Component from 'vue-class-component';
  19. import _ from 'lodash';
  20. import Window from '../../share/Window.vue';
  21. export default @Component({
  22. components: {
  23. Window,
  24. },
  25. watch: {
  26. sliderValue: function(newValue) {
  27. this.debouncedEmitPosChange(newValue);
  28. },
  29. },
  30. })
  31. class SetPositionPage extends Vue {
  32. sliderValue = null;
  33. sliderMax = null;
  34. created() {
  35. this.commit = this.$store.commit;
  36. this.reader = this.$store.state.reader;
  37. this.debouncedEmitPosChange = _.debounce((newValue) => {
  38. this.$emit('book-pos-changed', {bookPos: newValue});
  39. }, 500);
  40. }
  41. formatTooltip(val) {
  42. if (this.sliderMax)
  43. return (val/this.sliderMax*100).toFixed(2) + '%';
  44. else
  45. return 0;
  46. }
  47. close() {
  48. this.$emit('set-position-toggle');
  49. }
  50. keyHook(event) {
  51. if (event.type == 'keydown' && (event.code == 'Escape' || event.code == 'KeyP')) {
  52. this.close();
  53. }
  54. return true;
  55. }
  56. }
  57. //-----------------------------------------------------------------------------
  58. </script>
  59. <style scoped>
  60. .main {
  61. position: absolute;
  62. width: 100%;
  63. height: 100%;
  64. z-index: 40;
  65. display: flex;
  66. flex-direction: column;
  67. justify-content: center;
  68. align-items: center;
  69. }
  70. .clickStop {
  71. width: 100%;
  72. max-width: 600px;
  73. height: 140px;
  74. display: flex;
  75. }
  76. .slider {
  77. margin: 20px;
  78. background-color: #efefef;
  79. border-radius: 15px;
  80. }
  81. .el-slider {
  82. margin-right: 20px;
  83. margin-left: 20px;
  84. }
  85. </style>