@gyenno/nutui-taro
Version:
京东风格的轻量级移动端 Vue2、Vue3 组件库(支持小程序开发)
103 lines (102 loc) • 2.79 kB
JavaScript
import { reactive, computed, toRefs, resolveComponent, openBlock, createElementBlock, createElementVNode, normalizeStyle, renderSlot, createTextVNode, normalizeClass, withModifiers, createVNode } from "vue";
import { c as createComponent } from "./component-25dcca32.js";
import { Top } from "@nutui/icons-vue-taro";
import { _ as _export_sfc } from "./_plugin-vue_export-helper-cc2b3d55.js";
import "../locale/lang";
const { componentName, create } = createComponent("backtop");
const _sfc_main = create({
components: {
Top
},
props: {
height: {
type: String,
default: "100vh"
},
bottom: {
type: Number,
default: 20
},
right: {
type: Number,
default: 10
},
zIndex: {
type: Number,
default: 10
},
distance: {
type: Number,
default: 200
}
},
emits: ["click"],
setup(props, { emit }) {
const state = reactive({
backTop: false,
scrollTop: 1
});
const classes = computed(() => {
const prefixCls = componentName;
return {
[prefixCls]: true,
show: state.backTop
};
});
const style = computed(() => {
return {
right: `${props.right}px`,
bottom: `${props.bottom}px`,
zIndex: props.zIndex
};
});
const scroll = (e) => {
state.scrollTop = 2;
state.backTop = e.detail.scrollTop >= props.distance;
};
const click = (e) => {
state.scrollTop = 1;
emit("click", e);
};
return {
...toRefs(state),
classes,
style,
scroll,
click
};
}
});
const _hoisted_1 = ["scroll-top"];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_Top = resolveComponent("Top");
return openBlock(), createElementBlock("view", null, [
createElementVNode("scroll-view", {
"scroll-y": true,
style: normalizeStyle({ height: _ctx.height }),
onScroll: _cache[0] || (_cache[0] = (...args) => _ctx.scroll && _ctx.scroll(...args)),
"scroll-top": _ctx.scrollTop,
"scroll-with-animation": "true"
}, [
renderSlot(_ctx.$slots, "content")
], 44, _hoisted_1),
createTextVNode(),
createElementVNode("view", {
class: normalizeClass(_ctx.classes),
style: normalizeStyle(_ctx.style),
onClick: _cache[1] || (_cache[1] = withModifiers((...args) => _ctx.click && _ctx.click(...args), ["stop"]))
}, [
renderSlot(_ctx.$slots, "icon", {}, () => [
createVNode(_component_Top, {
width: "19px",
height: "19px",
class: "nut-backtop-main"
})
])
], 6)
]);
}
const index_taro = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
index_taro as default
};