css:用flex布局自动处理浮动,也不用去计算ul的宽度。
js:
1.当前点击的li距离屏幕左边的距离
2.li的宽度的一半
3.总屏幕宽度的一半
4.当前滚动条滚动的距离
最后结果:
当前滚动条滚动的距离+(当前点击的li距离屏幕左边的距离-总屏幕宽度的一半)+li的宽度的一半
效果如图:
代码(jquery-1.12.4.min.js可去百度下载)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" /> <title>css3 title 滑动显示</title> <style> .tab { width: 100%; background: #fff; overflow: auto; } .tab::-webkit-scrollbar { display: none; } .tab-ul { display: flex; display: -webkit-flex; padding: 0; } .tab-ul li { flex: 0 0 20%; text-align: center; list-style: none; } .tab-ul li.active { background: pink; } </style> </head> <body> <div class="tab"> <ul class="tab-ul"> <li class="active">1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function(){ $('.tab-ul li').on('click', function() { $('.tab-ul li').removeClass('active'); $(this).addClass('active'); var liLeft = $(this).offset().left; var liWidth = $(this).width()/2; var widths = $(window).width()/2; var scrollL = $('.tab').scrollLeft(); $('.tab').animate({ scrollLeft: scrollL + (liLeft - widths) + liWidth }) }) }) </script> </body> </html>