| | |
| | | <script setup> |
| | | |
| | | import * as itemOffset from '../lib/itemOffset.js' |
| | | import {onKeyStroke} from "@vueuse/core" |
| | | |
| | | const props = defineProps({ |
| | | total: Number, |
| | | offset: Number, |
| | |
| | | const emit = defineEmits(["go"]) |
| | | |
| | | function goStart () { |
| | | const {offset, limit, total} = props |
| | | console.log("goStart", {offset, limit, total}) |
| | | emit("go", 0) |
| | | const offset2 = itemOffset.goStart(props.offset, props.limit, props.total) |
| | | emit("go", offset2) |
| | | } |
| | | |
| | | function goEnd () { |
| | | const {offset, limit, total} = props |
| | | console.log("goEnd ", {offset, limit, total}) |
| | | emit("go", Math.floor(total / limit) * limit) |
| | | const offset2 = itemOffset.goEnd(props.offset, props.limit, props.total) |
| | | emit("go", offset2) |
| | | } |
| | | |
| | | function goPrev () { |
| | | const {offset, limit, total} = props |
| | | console.log("goPrev", {offset, limit, total}) |
| | | emit("go", Math.max(0, offset - limit)) |
| | | function goPrev (multiplier = 1) { |
| | | const offset2 = itemOffset.goPrev(props.offset, props.limit * multiplier, props.total) |
| | | emit("go", offset2) |
| | | } |
| | | |
| | | function goNext () { |
| | | const {offset, limit, total} = props |
| | | console.log("goNext", {offset, limit, total}) |
| | | console.log(total%limit) |
| | | const maxNext = Math.floor(total/limit)*limit |
| | | const nextNext = offset+limit |
| | | let noffset = Math.min(maxNext, nextNext) |
| | | // console.log({maxNext,nextNext,noffset}) |
| | | emit("go", noffset) |
| | | function goNext (multiplier = 1) { |
| | | const offset2 = itemOffset.goNext(props.offset, props.limit * multiplier, props.total) |
| | | emit("go", offset2) |
| | | } |
| | | |
| | | /////// KEYBOARD //////////////////////////////////////////////////////////////// |
| | | |
| | | onKeyStroke(["ArrowLeft", "ArrowRight"], (e) => { |
| | | let multiplier = 1 |
| | | switch (e.key) { |
| | | case "ArrowLeft": |
| | | console.log("go left") |
| | | multiplier = e.shiftKey ? 10 : 1 |
| | | goPrev(multiplier) |
| | | break |
| | | case "ArrowRight": |
| | | console.log("go right") |
| | | multiplier = e.shiftKey ? 10 : 1 |
| | | goNext(multiplier) |
| | | break |
| | | } |
| | | }) |
| | | |
| | | |
| | | </script> |
| | |
| | | <template> |
| | | |
| | | <div class="pagination"> |
| | | <input type="button" @click="goStart()" class="start" value="«" > |
| | | <input type="button" @click="goPrev()" class="prev" value="‹" > |
| | | <input type="button" @click="goStart()" class="start" value="«"> |
| | | <input type="button" @click="goPrev()" class="prev" value="‹"> |
| | | <span class="current"> |
| | | {{ offset }} - {{ offset + limit }} |
| | | / {{ total }} |
| | | </span> |
| | | <input type="button" @click="goNext()" class="next" value="›" > |
| | | <input type="button" @click="goEnd()" class="end" value="»" > |
| | | <input type="button" @click="goNext()" class="next" value="›"> |
| | | <input type="button" @click="goEnd()" class="end" value="»"> |
| | | </div> |
| | | |
| | | </template> |
| | |
| | | |
| | | .start, .end, .prev, .next |
| | | font-size 130% |
| | | //width 1em |
| | | |
| | | //width 1em |
| | | .current |
| | | width 12em; |
| | | text-align center; |