Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to browse between pages without screen flickering?

Tags:

html

css

I have two classic HTML pages (just HTML and CSS) and links between them.
When I click on these links, the screen flickers (it quickly goes white between transitions).
I tried to place this in the head - without result:

<meta http-equiv="Page-Enter" content="blendTrans(Duration=0.0)" />
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0.0)" />

I can usually open other sites without the flickering.
Browser is Firefox 16.0.1.

like image 328
Alegro Avatar asked Oct 29 '12 13:10

Alegro


People also ask

How do I make my browser stop flickering?

Change your desktop background and system color. Update your graphics drivers. Disable hardware acceleration in Google Chrome if enabled. Turn off smooth scrolling if enabled.

When I scroll my screen flickers?

Screen flickering in Windows 10 is usually caused by a display driver issue or incompatible app. To determine whether a display driver or app is causing the problem, check to see if Task Manager flickers.

How do I stop dual screen flickering?

For Display issues one fix that is working is to Roll back or Uninstall the Driver on the Display Device > Driver tab, restart PC to reinstall driver. You can also try older drivers in Device Manager > Display device > Driver tab > Update Driver > Browse > Let Me Pick.

Why does my website flicker?

Web pages loads slowly and gives a white flicker because many a times the browser is tied up with processing the components in the page as : images, style sheets, scripts, Flash etc. Before rendering any page, browsers will always wait until everything (beyond images) has finished downloading.


2 Answers

Just change your body background to:

body {
  background: url("Images/sky01.jpg") repeat scroll 0 0 #121210;
  font-family: Verdana,Geneva,sans-serif;
  font-size: 12px;
  margin: 0;
  padding: 0;
}

background color will prevent white flickering while loading the background image.

like image 63
Reflective Avatar answered Oct 20 '22 10:10

Reflective


That meta are for IE only, they don't work in FF.

You can't rely prevent flickering in plain HTML. The best solution I found is to replace every link with a JavaScript call where you download the page with AJAX and then you replace the document itself with the new content. Page refresh will be really fast and you won't see any blank screen while downloading.

Basic function may be something like this:

function followLink(pageUrl) 
{ 
    jQuery.ajax({ 
        url: pageUrl, 
        type: "GET", 
        dataType: 'html', 
        success: function(response){ 
            document.getElementsByTagName('html')[0].innerHTML = response
        } 
    }); 
}

Then you have to replace you links from:

<a href="mypage.html">Link</a>

With:

<a href="javascript:followLink('mypage.html')">Link</a>

More details about this: replace entire HTML document]1: how to replace the content of an HTML document using jQuery and its implications (not always so obvious).

Improvements

With this solution you force your users to use JavaScript, in case it's not enable they won't be able to click links. For this reason I would provide a fallback. First do not change <a> but decorate them with (for example) a CSS class like async-load. Now on the onload of the page replace all hrefs with their javascript: counterpart, something like this:

jQuery().ready(function() {
    jQuery("a.asynch-load").each(function() { 
        this.href = "javascript:followLink(\"" + this.href + "\")";
    });
});

With this you can handle a loading animation too (how it's implemented depends on what yuo're using and your layout). Moreover in the same place you can provide fade in/out animations.

Finally do not forget that this technique can be used for fragments too (for example if you provide a shared navigation bar and a content sections replaced when user click on a link the the navigation bar (so you won't need to load everything again).

like image 38
Adriano Repetti Avatar answered Oct 20 '22 10:10

Adriano Repetti