欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue實(shí)現(xiàn)微信小程序中預(yù)覽文件的縮放功能

 更新時(shí)間:2024年12月05日 08:44:49   作者:小蹦跶兒  
在微信小程序中,默認(rèn)情況下,文件預(yù)覽功能不支持文檔縮放,導(dǎo)致用戶在遇到小字體時(shí)難以清晰閱讀,為了解決這一問(wèn)題并提升用戶體驗(yàn),實(shí)現(xiàn)文檔的縮放功能至關(guān)重要,所以本文

一、實(shí)現(xiàn)的效果

實(shí)現(xiàn)思路

在文檔預(yù)覽界面的右上角新增了兩個(gè)縮放按鈕,用戶可以通過(guò)簡(jiǎn)單的點(diǎn)擊輕松實(shí)現(xiàn)放大和縮小,極大地提升了閱讀的便捷性和舒適度。這一設(shè)計(jì)不僅簡(jiǎn)化了操作流程,還確保了用戶能夠根據(jù)個(gè)人需求自由調(diào)整查看比例,享受更佳的閱讀體驗(yàn)。

上圖是原始比例,看起來(lái)確實(shí)不太清晰友好,下面是放大后的效果,可以進(jìn)行上下左右拖動(dòng):

二、背景介紹

微信小程序中的文件預(yù)覽功能是通過(guò)內(nèi)嵌的H5頁(yè)面(基于Vue項(xiàng)目并使用相關(guān)插件)實(shí)現(xiàn)的。因此,本次新增的縮放功能是在H5頁(yè)面中完成的,無(wú)需對(duì)小程序本身的代碼進(jìn)行任何修改。這一做法簡(jiǎn)化了開(kāi)發(fā)流程,確保了功能的快速迭代和部署。

最后會(huì)分享一下此功能遇到的兼容性問(wèn)題。

三、實(shí)現(xiàn)方案

  • html中有下面兩個(gè)改動(dòng):

注:

(1)按鈕的布局

(2)將插件外面包一層<div>

下面是所有代碼,可直接copy:

    <div class="btn">
      <img @click.stop="zoomIn" class="icon" src="@/assets/imgs/zoom-in.png" />
      <img @click.stop="zoomOut" class="icon" src="@/assets/imgs/zoom-out.png" />
    </div>
    <div class="content" id="document-preview">
      <!-- 三類插件的代碼可參考“背景介紹”中提到的那篇文章 -->
    </div>
  • 將按鈕放在右上角固定展示,這是所有的樣式:

下面是所有代碼,可直接copy

<style lang="less" scoped>
.officePreview {
  height: 100vh;
  width: 100%;
  position: relative;
  overflow-y: auto;
  overflow-x: auto;
  padding-bottom: 40px;

  #document-preview {
    width: 100%;
    transform-origin: top left;
    height: 100%;
    overflow-x: auto;
  }

  .btn {
    position: fixed;
    top: 60px;
    right: 50px;
    padding: 20px;
    z-index: 100;

    .icon {
      width: 50px;
      height: 50px;
      margin-left: 50px;
    }
  }
}
</style>
  • 操作按鈕進(jìn)行放大和縮小的功能代碼:

下面是所有代碼,可直接copy

    zoomIn() {
      this.scale += 0.1;
      const previewElement = document.getElementById('document-preview');
      previewElement.style.transform = `scale(${this.scale})`;
      previewElement.style.transformOrigin = 'top left';
      this.adjustContainerWidth(previewElement);
    },
    zoomOut() {
      if (this.scale > 0.1) { // 防止縮放到過(guò)小
        this.scale -= 0.1;
        const previewElement = document.getElementById('document-preview');
        previewElement.style.transform = `scale(${this.scale})`;
        previewElement.style.transformOrigin = 'top left';
        this.adjustContainerWidth(previewElement);
      }
    },
    adjustContainerWidth(previewElement) {
      const container = document.querySelector('.officePreview');
      const previewRect = previewElement.getBoundingClientRect();
      container.style.width = `${previewRect.width}px`;
    },
  • 這樣就完成了預(yù)覽文件的縮放功能。在小程序中打開(kāi)文件進(jìn)行預(yù)覽時(shí)也可以正常操作。

四、遇到的兼容問(wèn)題

問(wèn)題描述:

  • zoomIn()zoomOut()方法中僅操作scale值,并將樣式更新放在computed屬性中。
  • 動(dòng)態(tài)樣式通過(guò)v-bind:style綁定到class="content"<div>元素上。
  • 此方法在H5環(huán)境和微信開(kāi)發(fā)者工具中正常工作,但在實(shí)際手機(jī)端打開(kāi)微信小程序使用時(shí),縮放功能卻無(wú)法生效。

可能原因:

  • 微信小程序的渲染機(jī)制與H5有所不同,特別是在處理動(dòng)態(tài)樣式更新時(shí)可能存在延遲或不一致的問(wèn)題。
  • computed屬性雖然能夠?qū)崟r(shí)計(jì)算并返回最新的樣式對(duì)象,但在某些情況下,Vue的響應(yīng)式系統(tǒng)可能未能及時(shí)觸發(fā)樣式更新,尤其是在移動(dòng)設(shè)備上。

解決方案:

  • 使用watch監(jiān)聽(tīng)scale的變化,并在watch回調(diào)中直接更新style屬性,確保每次scale變化時(shí)都能立即應(yīng)用新的樣式。
  • 同時(shí),確保scale值的變化是漸進(jìn)的,避免一次性設(shè)置過(guò)大的scale值導(dǎo)致渲染問(wèn)題。

(現(xiàn)在剛想到可以這樣,當(dāng)時(shí)做需求的時(shí)候時(shí)間緊,直接用了最原始的方法……)

五、總結(jié)

本文解決了文件預(yù)覽默認(rèn)不支持縮放的問(wèn)題,通過(guò)H5頁(yè)面和Vue實(shí)現(xiàn)縮放功能,讓用戶能自由調(diào)整文檔查看比例,提升閱讀清晰度和舒適性,顯著改善了用戶體驗(yàn)。

以上就是Vue實(shí)現(xiàn)微信小程序中預(yù)覽文件的縮放功能的詳細(xì)內(nèi)容,更多關(guān)于Vue預(yù)覽文件縮放的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue自動(dòng)添加瀏覽器兼容前后綴操作

    vue自動(dòng)添加瀏覽器兼容前后綴操作

    這篇文章主要介紹了vue自動(dòng)添加瀏覽器兼容前后綴操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded解決辦法

    element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded解決辦法

    這篇文章主要給大家介紹了關(guān)于element-plus報(bào)錯(cuò)ResizeObserver?loop?limit?exceeded的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇)

    詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇)

    這篇文章主要介紹了詳解服務(wù)端預(yù)渲染之Nuxt(介紹篇),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • 解決vue項(xiàng)目F5刷新mounted里的函數(shù)不執(zhí)行問(wèn)題

    解決vue項(xiàng)目F5刷新mounted里的函數(shù)不執(zhí)行問(wèn)題

    今天小編就為大家分享一篇解決vue項(xiàng)目F5刷新mounted里的函數(shù)不執(zhí)行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 解決vue router組件狀態(tài)刷新消失的問(wèn)題

    解決vue router組件狀態(tài)刷新消失的問(wèn)題

    這篇文章主要介紹了vue router組件狀態(tài)刷新消失的問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • vue 單頁(yè)應(yīng)用和多頁(yè)應(yīng)用的優(yōu)劣

    vue 單頁(yè)應(yīng)用和多頁(yè)應(yīng)用的優(yōu)劣

    這篇文章主要介紹了vue 單頁(yè)應(yīng)用和多頁(yè)應(yīng)用的優(yōu)劣,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-10-10
  • 深入探討Vue?3中的組合式函數(shù)編程方式

    深入探討Vue?3中的組合式函數(shù)編程方式

    Vue?3中引入了組合式函數(shù)編程方式,可以更好地實(shí)現(xiàn)代碼的復(fù)用和可維護(hù)性。通過(guò)定義可組合的函數(shù),可以將組件的邏輯和狀態(tài)進(jìn)行拆分和組合,實(shí)現(xiàn)更靈活的代碼組織方式。同時(shí),組合式函數(shù)也支持響應(yīng)式數(shù)據(jù)和生命周期鉤子函數(shù),更加貼近Vue開(kāi)發(fā)的實(shí)際場(chǎng)景
    2023-05-05
  • 圖片預(yù)覽插件vue-photo-preview的使用示例詳解

    圖片預(yù)覽插件vue-photo-preview的使用示例詳解

    這篇文章主要介紹了圖片預(yù)覽插件vue-photo-preview的使用,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • vue2.0 自定義日期時(shí)間過(guò)濾器

    vue2.0 自定義日期時(shí)間過(guò)濾器

    本文給大家?guī)?lái)兩種方法實(shí)現(xiàn)vue2.0 自定義日期時(shí)間過(guò)濾器,需要的的朋友參考下吧
    2017-06-06
  • 實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過(guò)程實(shí)現(xiàn)

    實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過(guò)程實(shí)現(xiàn)

    這篇文章主要介紹了實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過(guò)程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論