I have been trying to build a scrolling marquee using JavaScript to add to a game stream that highlights the most recent followers, subscribers, etc. I am using StreamLabels which captures the gamertags of the most recent everything and places the data into a text file labeled for each. To start building this, I had to first make sure I could have a script that can pull the text and print the file data on the webpage. However, every Javascript code I find will not output the data on the screen.
I first tried (How to read a local text file?):
function readTextFile(file)
{
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function ()
{
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status == 0)
{
var allText = rawFile.responseText;
alert(allText);
}
}
}
rawFile.send(null);
}
and added readTextFile("follower.txt");
to the webpage code. Upon execution, the page was completely blank for Chrome, IE, and Edge.
Next I tried (How do I load the contents of a text file into a javascript variable?):
var client = new XMLHttpRequest();
client.open('GET', '/follower.txt');
client.onreadystatechange = function() {
alert(client.responseText);
}
client.send();
as well as the updated 2019 code found in the comments:
fetch('follower.txt')
.then(response => response.text())
.then((data) => {
console.log(data)
})
Each ended the same as the first: with a blank screen.
Finally, I gave up on the read from text using Javascript and started looking at <marquee>
, which as far as I know is an outdated and archaic way of doing it. The code I found incorporated a little Javascript for the scrolling and HTML/CSS to control the text. I also included an <object>
pull the text file into the code. What I finished with was:
<!DOCTYPE html>
<html>
<head>
<title>TITLE</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery.Marquee/1.5.0/jquery.marquee.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
<script>
$(function(){
$('.marquee').marquee({
allowCss3Support: true,
css3easing: 'linear',
easing: 'linear',
delayBeforeStart: 1000,
direction: 'left',
duplicated: true,
duration: 25000,
gap: 20,
pauseOnCycle: false,
pauseOnHover: false,
startVisible: false
});
});
</script>
<style type="text/css">
.marquee span {
margin-right: 100%;
height: 30px;
}
.marquee p {
white-space:nowrap;
margin-right: 1000px;
}
</style>
</head>
<body>
<div class="marquee" height=20px>
<p>Recent follower: <object type="text/html" data="follower.txt"></object> // Recent donation: <object type="text/html" data="follower.txt"></object><p>
</div>
</body>
</html>
Now this code works, however the <object>
is doing some weird things with spacing and randomly not being visible until the second object shows up on screen. Additionally, there is at least a 40 pixel spacing vertically between the Recent follower:
text and the <object>
, with the text being quite low compared to the text data (see image below).
I know there is something wrong with how I am doing each of the above codes, so any help would be greatly appreciated. My assumption is that using <object>
may be the root cause of the spacing issues. I had also planned on trying to do a text conversion to add into this, but without any usable functionality, not sure how that will go.