吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 739|回复: 8
收起左侧

[其他原创] 一个前端程序的pwa实现

[复制链接]
luokuang 发表于 2024-11-27 15:34
本帖最后由 luokuang 于 2024-12-1 18:39 编辑

一个前端程序的pwa实现。
运行截图:
framed-image-1732689484513.png

说明:
1. 支持PWA离线访问
2. 支持PC和H5截图套壳
3. 支持横向或者纵向切换
4. 支持修改设备尺寸

在线访问:
https://casing.pages.dev/

代码:
casing.zip (70.84 KB, 下载次数: 20)

[HTML] 纯文本查看 复制代码
<template>
  <div class="image-framer">
    <div class="layout-container">
      <div class="control-panel">
        <div class="upload-section">
          <input type="file" @change="handleImageUpload" accept="image/*" ref="fileInput" class="file-input" />
          <button @click="triggerFileInput" class="upload-btn">上传图片</button>
          <div v-if="imageUrl" class="image-info">
            <p>原始尺寸: {{ originalImageSize.width }} × {{ originalImageSize.height }} px</p>
          </div>
        </div>

        <div class="controls" v-if="imageUrl">
          <div class="frame-selector">
            <h3>选择设备类型</h3>
            <button :class="{ active: frameType === 'browser' }" @click="frameType = 'browser'">PC浏览器</button>
            <button :class="{ active: frameType === 'phone' }" @click="frameType = 'phone'">手机</button>
          </div>

          <div v-if="frameType === 'phone'" class="orientation-control">
            <h3>屏幕方向</h3>
            <button @click="toggleOrientation" :class="{ active: isLandscape }" class="orientation-btn">
              <span class="orientation-icon">{{ isLandscape ? '&#10231;' : '&#10234;' }}</span>
              {{ isLandscape ? '横向' : '纵向' }}
            </button>
          </div>

          <div class="size-controls">
            <div class="size-header">
              <h3>调整尺寸</h3>
              <button 
                v-if="frameType === 'phone'" 
                class="reset-size" 
                @click="resetToDeviceSize"
                :class="{ active: !useCustomSize }"
              >
                使用标准尺寸
              </button>
            </div>
            <div class="size-inputs">
              <label>
                宽度:
                <input 
                  type="number" 
                  :value="frameWidth" 
                  @input="e => { useCustomSize = true; updateFrameWidth(e.target.value) }"
                  :min="200"
                />
              </label>
              <label>
                高度:
                <input 
                  type="number" 
                  :value="frameHeight" 
                  @input="e => { useCustomSize = true; updateFrameHeight(e.target.value) }"
                  :min="200"
                />
              </label>
              <label class="maintain-ratio">
                <input 
                  type="checkbox" 
                  v-model="maintainAspectRatio"
                />
                保持比例
              </label>
            </div>
          </div>

          <button @click="downloadImage" class="download-btn">下载图片</button>
        </div>
      </div>

      <div class="preview-panel">
        <div class="preview-area">
          <div :class="['frame', frameType, { landscape: isLandscape }]" :style="frameStyle">
            <div v-if="frameType === 'browser'" class="browser-controls">
              <div class="browser-dots">
                <span></span>
                <span></span>
                <span></span>
              </div>
              <div class="browser-address">
                <div class="address-bar"></div>
              </div>
            </div>
            <div v-if="frameType === 'phone'" class="phone-notch" :style="notchStyle"></div>
            <div class="frame-content">
              <img v-if="imageUrl" :src="imageUrl" :style="imageStyle" />
              <div v-else class="placeholder-content">
                <div class="placeholder-text">请上传图片</div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ohohxie1992 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

AiniWang 发表于 2024-11-27 17:45
图中的上衣是什么东西
 楼主| luokuang 发表于 2024-11-27 17:48
AiniWang 发表于 2024-11-28 10:18
 楼主| luokuang 发表于 2024-11-28 10:28
d199212 发表于 2024-11-29 11:58
现在没人做pwa了吧
苏紫方璇 发表于 2024-12-1 13:18
请在帖子中粘贴部分核心代码
一、本版块仅限分享编程技术和源码相关内容,发布帖子必须带上关键代码和具体功能介绍【20220924强制执行】
Edcison 发表于 2024-12-1 16:21
谢谢楼主
focusql11 发表于 2024-12-1 17:30
学习学习,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-7 20:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表