Mastering Font Awesome - Change Icon on Hover Sandbox

A sandbox for the "Mastering Font Awesome" Udemy course.

by Jacob Hill

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<!-- Navigation -->
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
	<div class="container">
		<div class="navbar-header">
			<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
			<a class="navbar-brand" href="#">TEKFused</a>
		</div>
		<!-- Nav bar -->
		<div class="collapse navbar-collapse" id="navbar-collapse">
			
			<!-- Left Nav links -->
			<ul class="nav navbar-nav">
				<li>
					<a href="#" title="Home" class="fa fa-home fa-2x"></a>
				</li>
				<li>
					<a href="#" title="Share" class="fa fa-share-alt fa-2x"></a>
				</li>
				<li>
					<a href="#" title="Search" class="fa fa-search fa-2x"></a>
				</li>
			</ul>
			
			<!-- Right Nav links -->
			<ul class="nav navbar-nav navbar-right">
				<li>
					<a href="#" title="Cart" class="fa fa-shopping-cart fa-2x"></a>
				</li>
				<li>
					<a href="#" title="My Profile" class="fa fa-user-circle fa-2x"></a>
				</li>
			</ul>
		</div>
	</div>
</nav>

<!-- Page Content -->
<div class="container" id="content">
	<div class="row">
		<div class="col-sm-4">
			<i class="btn btn-default btn-circle fa fa-comment-o"></i>
			<h2>Icon Change Method 1</h2>
			<p>This icon change is very simple. It simply changes the icon without...

CSS

#fa-comments-wrapper {
	height:250px;
	width:250px;
	border-radius:50%;
	margin:0 auto;
}

#content .fa-comments, #content .fa-comments-o {
	position:relative;
}

#content .fa-comments-o {
	top:-250px;
}

.fa-comments {
	opacity:1;
}

.fa-comments-o {
	opacity:0;
}

#content .fa {
    font-size: 100px;
    display: block;
    text-align: center;
}

#content .fa:hover {
	background-color:#ddd;
}

.fa {
	transition: color 1s;
}

body {
	padding-top:100px;
}

h2 {
	margin-top:35px;
}

#content {
	text-align:center;
}

.btn-circle {
    width: 250px;
    height: 250px;
    line-height: 250px;
    margin: 0 auto;
    border-radius: 50%;
}

JavaScript

basicIconChange();
fadeIconChange();
seamlessIconChange();

// Basic icon change
function basicIconChange()
{
	$('.fa-comment-o').hover(
	// Mouse in
	function()
	{
		$(this).removeClass('fa-comment-o').addClass('fa-commenting-o');
	},
	// Mouse out
	function()
	{
		$(this).removeClass('fa-commenting-o').addClass('fa-comment-o');
	});
};

// Icon change with fade
function fadeIconChange()
{
	$('.fa-address-book').hover(
	// Mouse in
	function()
	{
		var sel = $(this);
		$(sel).stop().animate({opacity:0},500,function()
		{
			$(sel).removeClass('fa-address-book').addClass('fa-address-book-o');
			$(sel).stop().animate({opacity:1},500);
		});
	},
	// Mouse out
	function()
	{
		var sel = $(this);
		$(sel).stop().animate({opacity:0},500,function()
		{
			$(sel).removeClass('fa-address-book-o').addClass('fa-address-book');
			$(sel).stop().animate({opacity:1},500);
		});
	});
};

// Seamless icon change
function seamlessIconChange()
{
	$('#fa-comments-wrapper').hover(
	// Mouse in
	function(e)
	{
		$('.fa-comments').stop().animate({opacity:0},500);
		$('.fa-comments-o').stop().animate({opacity:1},500);
	},
	// Mouse out
	function(e)
	{
		$('.fa-comments-o').stop().animate({opacity:0},500);
		$('.fa-comments').stop().animate({opacity:1},500);
	});
};