在离子框架中放大时,离子滚动会模糊我的图像

use*_*088 5 html javascript android angularjs ionic-framework

我在离子框架中的"离子滚动"标签中加载了一张图片.当我然后尝试放大时,图片模糊,字母不可读.这在我的浏览器和Android上都会发生.

我的模板的代码:

<ion-view view-title="{{map.name}}" ng-controller="MapsCtrl">

<ion-scroll zooming="true"
        direction="xy" 
        delegate-handle="zoom-pane" 
        min-zoom="1" 
        max-zoom="20" 
        scrollbar-x="false" 
        scrollbar-y="false" 
        overflow-scroll="false">
    <img style="width:100%; heigth:100%" ng-src="{{map.img}}"/>

</ion-scroll>   
Run Code Online (Sandbox Code Playgroud)

我使用的图片是4642 x 4642像素,因此放大时图像应该很清晰.

Eri*_*thi 0

浏览器这样做是为了性能优化,在渲染页面时无需保留图像的高分辨率版本。

我可以通过加载全尺寸图像然后使用$ionicScrollDelegate手柄显示正确缩放的图像来解决这个问题。它不是很优雅,但可以在 iOS 和 Android 中运行。

模板

<ion-scroll
    id="imgContainer"
    max-zoom="10.0" min-zoom="0.10"
    zooming="true" direction="xy"
    style="max-width:100%; height:100vh; width:100vh;"
    overflow-scroll="false"
    delegate-handle="imgContainer">
    <img ng-src="{{imageUrl}}" />
</ion-scroll>
Run Code Online (Sandbox Code Playgroud)

控制器

.controller('imageCtrl', function ($ionicPlatform, $ionicScrollDelegate, $scope, $state, $http, $stateParams)
{
    //Create DOM img element
    var tmpImg = document.createElement('img');
    tmpImg.src = 'assets/images/hi_res_image.svg';

    //Ensure image loads
    var imgLoadPoll = setInterval(function () {
        if (tmpImg.naturalWidth) {
            clearInterval(imgLoadPoll);

            //Full img dimensions can be used in scope
            $scope.imageWidth = tmpImg.naturalWidth;
            $scope.imageHeight = tmpImg.naturalHeight;

            //Calculate Zoom Ratio
            var imgContainerWidth = document.getElementById('imgContainer').clientWidth;
            var zoomRatio = ( (imgContainerWidth) / tmpImg.naturalWidth);

            //Load Image & Animate Zoom
            console.log('Loaded: image (' + tmpImg.naturalWidth + 'px wide) into container (' + imgContainerWidth + 'px wide) requiring zoom: ' + zoomRatio);
            $scope.imageUrl =  'assets/images/hi_res_image.svg';
            $ionicScrollDelegate.$getByHandle('imgContainer').zoomTo(zoomRatio,1,0,0); //Set 1->0 to disable animation
        }
    }, 10);
}
Run Code Online (Sandbox Code Playgroud)