123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- import { miniprogramThis } from '../internals/global'
- import { pxToNumber } from '../shared/pxToNumber'
- export const useQuery = (vm) => {
- return !!vm ? miniprogramThis.createSelectorQuery().in(vm) : miniprogramThis.createSelectorQuery()
- }
- const makeFields = () => ({
- id: true,
- dataset: true,
- mark: true,
- rect: true,
- // size: true,
- scrollOffset: true,
- computedStyle: [
- 'width',
- 'height',
- 'borderTopWidth',
- 'borderRightWidth',
- 'borderBottomWidth',
- 'borderLeftWidth',
- ],
- node: true,
- })
- const makeNodeRef = (node) => {
- const borderRightWidth = pxToNumber(node.borderRightWidth || 0)
- const borderLeftWidth = pxToNumber(node.borderLeftWidth || 0)
- const borderTopWidth = pxToNumber(node.borderTopWidth || 0)
- const borderBottomWidth = pxToNumber(node.borderBottomWidth || 0)
- const clientWidth = pxToNumber(node.width)
- const clientHeight = pxToNumber(node.height)
- const offsetWidth = clientWidth + borderRightWidth + borderLeftWidth
- const offsetHeight = clientHeight + borderTopWidth + borderBottomWidth
- return {
- id: node.id,
- dataset: node.dataset,
- mark: node.mark,
- top: node.top,
- right: node.right,
- bottom: node.bottom,
- left: node.left,
- width: offsetWidth,
- height: offsetHeight,
- x: node.left,
- y: node.top,
-
- offsetWidth,
- offsetHeight,
- clientLeft: borderLeftWidth,
- clientTop: borderTopWidth,
- clientWidth,
- clientHeight,
- scrollHeight: node.scrollHeight,
- scrollLeft: node.scrollLeft,
- scrollTop: node.scrollTop,
- scrollWidth: node.scrollWidth,
- node: node.node,
- }
- }
- export const useRef = (selector, vm) => {
- return new Promise((resolve) => {
- const query = useQuery(vm)
- const isArray = Array.isArray(selector)
- const classList = isArray ? selector : [selector]
- classList.forEach((s) => {
- query
- .select(s)
- .fields(makeFields())
- })
- query.exec((nodes) => {
- resolve(
- isArray
- ? nodes.map((node) => makeNodeRef(node))
- : makeNodeRef(nodes[0])
- )
- })
- })
- }
- export const useRefAll = (selector, vm) => {
- return new Promise((resolve) => {
- const query = useQuery(vm)
- const isArray = Array.isArray(selector)
- const classList = isArray ? selector : [selector]
- classList.forEach((s) => {
- query
- .selectAll(s)
- .fields(makeFields())
- })
- query.exec((nodesList) => {
- resolve(
- isArray
- ? nodesList.map((nodes) => nodes.map((node) => makeNodeRef(node)))
- : nodesList[0].map((node) => makeNodeRef(node))
- )
- })
- })
- }
- export const useRect = (selector, vm) => {
- return new Promise((resolve) => {
- const query = useQuery(vm)
- const isArray = Array.isArray(selector)
- const classList = isArray ? selector : [selector]
- classList.forEach((s) => {
- query
- .select(s)
- .boundingClientRect()
- })
- query.exec((nodes) => {
- resolve(isArray ? nodes : nodes[0])
- })
- })
- }
- export const useRectAll = (selector, vm) => {
- return new Promise((resolve) => {
- const query = useQuery(vm)
- const isArray = Array.isArray(selector)
- const classList = isArray ? selector : [selector]
- classList.forEach((s) => {
- query
- .selectAll(s)
- .boundingClientRect()
- })
- query.exec((nodesList) => {
- resolve(isArray ? nodesList : nodesList[0])
- })
- })
- }
- export const useScrollOffset = (vm) => {
- return new Promise((resolve) => {
- const query = useQuery(vm)
- query
- .selectViewport()
- .scrollOffset()
- query.exec(([node]) => {
- resolve(node)
- })
- })
- }
- export const useComputedStyle = (selector, ...args) => {
- const computedStyle = args.length === 2 ? args[0] : ['width', 'height']
- const vm = args.length === 2 ? args[1] : args[0]
- return new Promise((resolve) => {
- const query = useQuery(vm)
- query
- .select(selector)
- .fields({
- computedStyle,
- })
- query.exec(([node]) => {
- resolve(node)
- })
- })
- }
|