2017-08-18 15 views
2

我有一張表,其中有一個href鏈接到圖片/媒體文件。當我的頁面更新圖像時[媒體]在setInterval函數中閃爍。其他一切都很好。我將如何阻止這種情況發生?如何停止setInterval頁面上閃爍的鏈接圖像更新

PHP代碼

<?php 

include("../lib/config.php"); 
$conn=mysqli_connect("$dbhost","$dbuser","$dbpass","$dbname"); 
    $result = mysqli_query($conn, " SELECT name, message, time, media FROM message ORDER BY ID DESC"); 
    mysqli_close($conn); 

    while($row = mysqli_fetch_array($result)) { 
     echo "<tr>"; 
      echo "<td>" . $row['name'] . "</td>"; 
      echo "<td>" . $row['message'] . "</td>"; 
      echo "<td>" . $row['time'] . "</td>"; 
      //echo "<td>" . $row['media'] . "</td>"; 
      echo "<td><a href=\"" . $row['media'] . "\" target=\"_blank\" alt=\"Media not available\"> <img src=\"" . $row['media'] . "\" height=\"50\" ></a></td>";        
     echo "</tr>"; 
    } 
?> 

js代碼

<script type="text/javascript"> 
    setInterval(function(){ 
     $.get("../pageLinks/messageOne.php" , function(result){ 
     $("#testMessageOne").html(result); 
     }); 
    }, 20000); 
</script> 

回答

3

在插入到DOM之前,您需要確定圖像是否已加載,以防止瀏覽器呈現/下載圖像時引起的閃爍。

閃爍演示:https://jsfiddle.net/v8z5bvL2/

要做到這一點,你需要找到的圖像(S)在您的請求的內容,並添加一個load事件來觸發插入到DOM一旦所有的圖像(S)已完成加載。

不利之處在於內容在圖像加載完成之後纔會更新。

防閃爍演示:https://jsfiddle.net/g7m1au40/

setInterval(function(){ 
    $.get("../pageLinks/messageOne.php" , function(result){ 
     var result = $(result); 
     var img = result.find('img'); 
     var imgCount = img.length; //count images in the content 
     var imgLoaded = 0; 
     img.on('load', function() { 
      if (imgCount === 0 || imgLoaded++ === imgCount) { 
       //the images have finished loading, display the content. 
       $("#testMessageOne").html(result); 
      } 
     }); 
    }); 
}, 20000); 
+0

不起作用。我認爲問題是我們的代碼正在尋找一個文件夾中的圖像。我在哪裏使用href的圖像。當我嘗試這個表格顯示爲空時 –

+0

你的意思是'href'是一個php腳本而不是物理圖像?它應該仍然會觸發圖像上的加載事件,除非一個是無效的(不加載),這會導致加載計數失敗並且不會觸發'.html(result);'。請使用ajax響應數據樣本更新您的問題,以便我們可以重現問題。 – fyrye

+0

@ThomasDegroot還請檢查以確保沒有Javascript錯誤發生。 (F12,單擊控制檯選項卡,然後刷新頁面)。 – fyrye

1

你能看到,如果這解決問題了嗎?

setInterval(function(){ 
    $.get("../pageLinks/messageOne.php" , function(result){ 
    var $html = $(result); 
    $("#testMessageOne").replaceWith($html); 
    }); 
}, 20000); 

它是什麼解析HTML 之前它附加到文件。 jquery對象在將其推送到頁面之前將其轉換爲有效的DOM對象。
這意味着該頁面在內容被清除後不必進行html解析,並且應該能夠更快地更新內容,並且希望在一幀畫面內進行,因爲它全部在一個javascript調用中。

+0

這將顯示錶中的數據與無閃爍,但不顯示在數據庫中添加新數據。 –

+0

請發佈一個正常運行的示例html包裝器和示例數據從ajax請求返回哪些內容需要替換當前顯示的數據。 – Tschallacka

+0

@ThomasDegroot由於你的ajax腳本沒有包含整個表,所以認爲這個註釋的問題是由於'replaceWith'引起的,所以把它改爲'html'。 '

'被替換爲' ...' – fyrye