diff --git a/core/includes/batch.inc b/core/includes/batch.inc
index a4b5378..8f91f73 100644
--- a/core/includes/batch.inc
+++ b/core/includes/batch.inc
@@ -164,6 +164,7 @@ function _batch_progress_page() {
     '#percent' => $percentage,
     '#message' => array('#markup' => $message),
     '#label' => $label,
+    '#animate' => TRUE,
     '#attached' => array(
       'html_head' => array(
         array(
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 25cc7c4..3ffbfbd 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1754,7 +1754,7 @@ function drupal_common_theme() {
       'variables' => array('url' => NULL, 'title' => NULL),
     ),
     'progress_bar' => array(
-      'variables' => array('label' => NULL, 'percent' => NULL, 'message' => NULL),
+      'variables' => array('label' => NULL, 'percent' => NULL, 'message' => NULL, 'animate' => TRUE),
     ),
     'indentation' => array(
       'variables' => array('size' => 1),
@@ -1837,3 +1837,17 @@ function drupal_common_theme() {
     ),
   );
 }
+
+/**
+ * Implements hook_preprocess_HOOK().
+ *
+ * Allow ajax version of progress to be animated.
+ *
+ * @see progress.js
+ */
+function template_preprocess_progress_bar(&$variables) {
+  $variables['#attached']['js'][] = array(
+    'type' => 'setting',
+    'data' => array('progressBarAnimate' => $variables['animate']),
+  );
+}
diff --git a/core/misc/progress.js b/core/misc/progress.js
index 2675751..9e63e11 100644
--- a/core/misc/progress.js
+++ b/core/misc/progress.js
@@ -53,6 +53,11 @@
     // have completed their current activity and not interrupt the screen
     // reader.
     this.element = $(Drupal.theme('progressBar', id));
+
+    // Implement optional animation of progress bar.
+    if (drupalSettings.progressBarAnimate) {
+      $(this.element).find('div.progress__bar').addClass('progress__bar--animate');
+    }
   };
 
   $.extend(Drupal.ProgressBar.prototype, /** @lends Drupal.ProgressBar# */{
diff --git a/core/modules/system/templates/progress-bar.html.twig b/core/modules/system/templates/progress-bar.html.twig
index 885a80f..93852df 100644
--- a/core/modules/system/templates/progress-bar.html.twig
+++ b/core/modules/system/templates/progress-bar.html.twig
@@ -9,6 +9,10 @@
  * - label: The label of the working task.
  * - percent: The percentage of the progress.
  * - message: A string containing information to be displayed.
+ * - animate: If set, enable the progress bar animation.
+ *
+ * @see template_preprocess_progress_bar()
+ * @see progress.js
  *
  * @ingroup themeable
  */
@@ -17,7 +21,7 @@
   {% if label %}
     <div class="progress__label">{{ label }}</div>
   {% endif %}
-  <div class="progress__track"><div class="progress__bar" style="width: {{ percent }}%"></div></div>
+  <div class="progress__track"><div class="progress__bar{% if animate %} progress__bar--animate{% endif %}" style="width: {{ percent }}%"></div></div>
   <div class="progress__percentage">{{ percent }}%</div>
   <div class="progress__description">{{ message }}</div>
 </div>
diff --git a/core/themes/classy/css/components/progress.css b/core/themes/classy/css/components/progress.css
index 1fb80a6..7190da1 100644
--- a/core/themes/classy/css/components/progress.css
+++ b/core/themes/classy/css/components/progress.css
@@ -44,22 +44,26 @@
   padding: 0 1px;
   height: 16px;
   border-radius: 10em;
-  -webkit-animation: animate-stripes 3s linear infinite;
-  -moz-animation: animate-stripes 3s linear infinite;
-  -webkit-transition: width 0.5s ease-out;
-  transition: width 0.5s ease-out;
 }
 [dir="rtl"] .progress__bar {
   margin-left: 0;
   margin-right: -1px;
-  animation-direction: reverse;
-  -webkit-animation-direction: reverse;
-  -moz-animation-direction: reverse;
 }
 
 /**
  * Progress bar animations.
  */
+.progress__bar--animate {
+  -webkit-animation: animate-stripes 3s linear infinite;
+  -moz-animation: animate-stripes 3s linear infinite;
+  -webkit-transition: width 0.5s ease-out;
+  transition: width 0.5s ease-out;
+}
+[dir="rtl"] .progress__bar--animate {
+  animation-direction: reverse;
+  -webkit-animation-direction: reverse;
+  -moz-animation-direction: reverse;
+}
 @-webkit-keyframes animate-stripes {
   0% {background-position: 0 0, 0 0;} 100% {background-position: 0 0, -80px 0;}
 }
