6

JQuery 1.1.0 と Phonegap 1.9.0 を使用して、Android 用の html5 アプリを開発しています。キャンバスにバッテリーを描画して更新する小さなアニメーションがあります。充電中のバッテリーのように見えます。Android 4.0.4で非常にうまく機能しました。

昨日、Galaxy Nexus で Android 4.1.1 へのアップデートを受け取りました。その変更の後、アニメーションに問題がありました。キャンバス上の画像に描画するようになりました.1つは前にあり、もう1つは間違った座標で後ろにあります。Java Script Engine V8 への変更と関係があると思います。おそらくキャッシュの問題でしょうか?! 私の PC のすべてのブラウザで、アニメーションは非常にうまく機能します。

私のhtmlコードは次のとおりです。

<!DOCTYPE html>
<html>
<head> 
<title>Hella App</title> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 

<link rel="stylesheet" href="jquery.mobile-1.1.1.min.css"/>
<script src="jquery-1.7.2.min.js"></script>
<script src="jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-1.9.0.js"></script>

<style>
    .ui-page { background: black;}
</style>

</head>

   <body>

<div data-role="page" id="dataPageBattery" data-theme="a">
    <h2 align="center">Battery State</h2>
    <div data-role="header" data-position="fixed" data-theme="a">
        <h1>Car Data</h1>
    </div>

    <div data-role="content" align="center">
        <canvas id="myBatteryCanvas" width="device-width"
            height="device-height">                        
            Sorry, your browser doesn't support canvas technology        
        </canvas>
    </div>
    <h4 align="center" id="batteryProzent"></h4>

    <script type="text/javascript" src="battery.js"></script>
    <script>$(document).on("pageshow",init());</script> 


    <div data-role="footer" data-position="fixed" data-id="persFooter">
        <div data-role="navbar">
            <ul>
                <li><a href="home.html" data-icon="home">Connect</a></li>
                <li><a href="carView.html" data-icon="gear">Cars</a></li>
                <li><a href="infoView.html" data-icon="info">Info</a></li>
            </ul>
        </div>
    </div>

<script>                                       
$('#dataPageBattery').on('swipeleft',function(){ 
 $.mobile.changePage("geolocation.html", { transition: "slide"});   
 console.log('slideLeft');
})  

$('#dataPageBattery').on('swiperight',function(){ 
 $.mobile.changePage("fuelGauge.html", { transition: "slide", reverse: 'true'});    
 console.log('slideLeft');
})  
     </script>
</div>



    </body>
    </html>

私がロードしている私のJavaスクリプトコード:

    var canvas = document.getElementById("myBatteryCanvas");
      var ctx = canvas.getContext("2d");
      var x = 50;
      var y = canvas.height - 30;
      var mx = 2;
      var my = 1;
      var WIDTH = canvas.width;
      var HEIGHT = canvas.height;
     var prozent = 1;

  function drawRect(y, farbe) {
ctx.beginPath();
ctx.rect(124, y, 50, 21);
ctx.fillStyle = farbe;
ctx.fill();

window.setTimeout("draw()", 10);
 }

 function draw() {
if (y >= 80) {
    y -= my;
    window.setTimeout("drawRect(y,'red')", 10);
} else if (y >= 50) {
    y -= my;
    window.setTimeout("drawRect(y,'orange')", 10);
    ctx.rect(124, 50 + 50, 50, 40);
    ctx.fillStyle = 'orange';
    ctx.fill();

} else {
    ctx.rect(124, 50, 50, canvas.height - 60);
    ctx.fillStyle = 'lightgreen';
    ctx.fill();
}

document.getElementById('batteryProzent').innerHTML = '> ' + prozent + ' %';
prozent++;
if (prozent % 4 == 0)
    prozent++;
 }

 function init() {
ctx.rect(122, 40, 54, 100);
ctx.fillStyle = 'floralwhite';
ctx.fill();
ctx.lineWidth = 4;
ctx.strokeStyle = '#303030';
ctx.stroke();

draw();
 }

もう 1 つの優れた問題: この html ページを Phonegap コード内で開始する最初のページとして使用しても、問題はありません。しかし、アプリ全体で使用すると、問題に直面しています。このため、最初のページも投稿します。

<!DOCTYPE html> 
<html> 
<head> 
<title> BLE App</title> 
<script type="text/javascript" charset="utf-8" src="cordova-1.9.0.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1"> 

<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="Logo.png" />

<link rel="stylesheet" href="jquery.mobile-1.1.0.min.css"/>
<script src="jquery-1.7.1.min.js"></script>
<script src="jquery.mobile-1.1.0.min.js"></script>
<script src="http://maps.google.com/maps/api/js?sensor=true"></script>

<style>
    .ui-page { background: black;}
</style>

</head> 
  <body> 

 <div data-role="page" id="mainPage" data-theme="a"> 
<div data-role="header" data-position="fixed" data-theme="a">
    <h1> BLE</h1>
</div><!-- /header -->

<div data-role="content">   
    <!-- <p> BLE Test App</p> -->
    <label for="mainPage_textFrage">Find BLE Devices:</label>
    <!-- <input type="text" id="mainPage_textFrage" value="" placeholder="Ihre Frage"/> -->
    <a data-role=button id="mainPage_showAnswerButton">Search</a>
</div><!-- /content -->

<div data-role="footer" data-position="fixed" data-id="persFooter">
    <div data-role="navbar">
        <ul>
            <li><a href="home.html" data-icon="home">Connect</a></li>
            <li><a href="carView.html" data-icon="gear">Cars</a></li>
            <li><a href="infoView.html" data-icon="info">Info</a></li>
        </ul>
    </div><!-- /navbar -->
</div><!-- /footer -->
  </div>

   <script>                                    
$('#mainPage_showAnswerButton').on('click',function(){
 $.mobile.changePage("searchResult.html", { transition: "slideup"});
 console.log('click');
})                                       
 </script>

 </body>
 </html>

同じ問題を抱えている人はいますか?誰か助けてくれませんか?

これまでありがとう!

更新: JQuery を 1.7.2 に、JQuery Mobile を 1.1.1 に更新しました。しかし、それでも変化はありません。アニメーションが機能していません。

4

3 に答える 3

5

考えられる解決策:

jquery-mobile-css から次の行を削除すると、問題が解消されます。

/*content area*/
.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }

(「overflow-x: hidden」を削除するだけで十分です)。

より良い解決策は、(キャンバス要素自体ではなく) 周囲の div 要素の "overflow-x" 属性をオーバーライドすることです。

例 (バッテリーの状態):

<div data-role="content" align="center" data-theme="a" style="overflow-x: visible">
 <canvas id="myBatteryCanvas" width="device-width" height="device-height">                        
    Sorry, your browser doesn't support canvas technology        
 </canvas>
</div>

http://code.google.com/p/android/issues/detail?id=35474も参照してください。

于 2012-10-10T11:12:58.677 に答える
0

あるページから別のページに移行するときに問題が発生し、ページ自体をスタンドアロンでロードするときに問題が発生しない場合は、ページの移行中にコンテンツを(アン)ロードする必要があるように思われます。jQuery Mobileは<div data-role="page">...</div>、ページ遷移で内部にあるものをすべてロードします。これは、これらのdiv以外のものはすべて無視されることも意味します。それだけでなく、前のページのjavascriptコードは次のページに続きます。

2つのHTMLページの下部にの2つのブロックが表示<script>...</script>され、そのうちの1つ、つまり更新したページの1つだけが読み込まれます。data-role="pagediv内にスクリプトを挿入して、これらのスクリプトがロードされていることを確認してください

以下を変更する必要があります

<script>$(document).ready(window.setTimeout("init()", 500));</script>

<script>$(document).on("pageshow",window.setTimeout("init()", 500));</script>

jQMのドキュメントによると、使用すべきではありません$(document).ready(...)

于 2012-07-18T08:18:32.907 に答える
0

Android 4.1.1 を実行している携帯電話でも同じ問題が発生しています。スライダーを表示する html5 キャンバス アプリケーションがあります。スライダーの画像が2回表示されます。Android 4.1、4.0、2.3 デバイスでは問題なく表示されます。単純な Java スクリプトの変更でこの欠陥を回避できるとは思いません。最新の Jellybean パッチで単純に壊れています。

これを証明するために、複数の異なるバージョンの Android を搭載した Nexus S および Galaxy Nexus スマートフォンを使用しました (スマートフォン固有ではありません)。

于 2012-08-09T16:05:55.467 に答える