放大图片组件 img-preview.vue
| <template> |
| <div class="preview" @click="onClick" @keydown="onKeydown"> |
| <div class="preview-img" > |
| <img :src="src" alt /> |
| </div> |
| </div> |
| </template> |
| <script> |
| export default { |
| data() { |
| return {}; |
| }, |
| props: { |
| src: { |
| type: String, |
| default: "", |
| required: true |
| }, |
| onClick: { type: Function, default: () => {}, required: true }, |
| onKeydown: { type: Function, default: () => {}, required: true } |
| } |
| }; |
| </script> |
| <style lang="scss" scoped> |
| .preview { |
| width: 100%; |
| height: 100%; |
| background: rgba(0, 0, 0, 0.5); |
| position: fixed; |
| top: 0; |
| bottom: 0; |
| left: 0; |
| right: 0; |
| z-index: 9999; |
| overflow: scroll; |
| cursor: pointer; |
| display: flex; |
| align-items: center; |
| } |
| .preview-img { |
| padding: 20px; |
| display: inline-block; |
| margin: auto; |
| img { |
| max-width: 100%; |
| max-height: 100%; |
| } |
| } |
| </style> |
| |
富文本中点击图片放大 FulltextDisplay.vue
| <template> |
| <div class="rich-text-container"> |
| <div v-html="props.richText" style="border: none !important;" |
| @click="showPreviewImg" |
| ></div> |
| <div v-if="imgBiggerState.isPreview"> |
| <ImgPreview |
| :src="imgBiggerState.imgSrc" |
| :onClick="closeImgPreview" |
| :onKeydown="keydownCloseImgPreview" |
| /> |
| </div> |
| </div> |
| </template> |
| |
| <script setup> |
| import { reactive } from 'vue' |
| import ImgPreview from '@/views/Manage/FeedbackManage/components/ImgPreview.vue' |
| const props = defineProps({ |
| richText: { |
| type: String, |
| default: '' |
| } |
| }) |
| |
| const imgBiggerState = reactive({ |
| isPreview: false, |
| ifShowBigger: false, |
| imgSite: { |
| height: 0, |
| width: 0, |
| }, |
| imgSrc: '', |
| }) |
| const showPreviewImg = (e) => { |
| if (e.target.nodeName === 'IMG') { |
| imgBiggerState.isPreview = true |
| let userAgent = navigator.userAgent |
| if (userAgent.indexOf('Chrome') > -1) { |
| imgBiggerState.imgSrc = e.target.currentSrc |
| } else { |
| imgBiggerState.imgSrc = e.target.href |
| } |
| } |
| } |
| |
| const keydownCloseImgPreview = (e) => { |
| if (e && e.keyCode === 27) { |
| imgBiggerState.isPreview = false; |
| } |
| } |
| const closeImgPreview = () => { |
| imgBiggerState.isPreview = false; |
| } |
| |
| </script> |
| |
| <style lang="scss" scoped> |
| .rich-text-container { |
| max-height: 200px; |
| overflow: auto; |
| } |
| |
| .rich-text-container div { |
| color: #fff; |
| |
| } |
| |
| ::-webkit-scrollbar { |
| width: 10px; |
| } |
| |
| |
| ::-webkit-scrollbar-thumb { |
| background: var(--dark-mono-a100, #CCDBFF0F); |
| height: 90px; |
| width: 2px; |
| border-radius: 2px 0px 0px 0px; |
| } |
| |
| |
| ::-webkit-scrollbar-thumb:hover { |
| background: var(--dark-mono-a100, #CCDBFF0F); |
| width: 6px; |
| border-radius: 2px; |
| |
| } |
| |
| |
| ::-webkit-scrollbar-track { |
| width: 6px; |
| background-color: #23334f; |
| border-radius: 8px; |
| } |
| |
| </style> |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具