Делаем динамическую гистограмму с использованием JS и jQuery
[vc_row][vc_column][vc_column_text]Задача такая: необходимо сделать вывод на каждой странице гистограммы с оценками. Всего 5 баллов, за каждый балл есть определенное количество голосов. Нужно вывести гистограмму в процентном соотношении голосов за каждую оценку.
Пример реализации ниже:[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTIwJTNDZGl2JTIwY2xhc3MlM0QlMjJyYXRpbmctaGlzdG9ncmFtJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGl2JTIwY2xhc3MlM0QlMjJyYXRpbmctYmFyLWNvbnRhaW5lciUyMGZpdmUlMjIlMjBkYXRhLWlkJTNEJTIyNSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1sYWJlbCUyMiUzRSUyMDUlMjAlM0MlMkZzcGFuJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3BhbiUyMGNsYXNzJTNEJTIyYmFyJTIyJTNFJTNDJTJGc3BhbiUzRSUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1udW1iZXIlMjIlM0UlM0MlMkZzcGFuJTNFJTIwJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGl2JTNFJTBBJTIwJTIwJTIwJTIwJTNDZGl2JTIwY2xhc3MlM0QlMjJyYXRpbmctYmFyLWNvbnRhaW5lciUyMGZvdXIlMjIlMjBkYXRhLWlkJTNEJTIyNCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1sYWJlbCUyMiUzRSUyMDQlMjAlM0MlMkZzcGFuJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3BhbiUyMGNsYXNzJTNEJTIyYmFyJTIyJTNFJTNDJTJGc3BhbiUzRSUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1udW1iZXIlMjIlM0UlM0MlMkZzcGFuJTNFJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGl2JTNFJTBBJTIwJTIwJTIwJTIwJTNDZGl2JTIwY2xhc3MlM0QlMjJyYXRpbmctYmFyLWNvbnRhaW5lciUyMHRocmVlJTIyJTIwZGF0YS1pZCUzRCUyMjMlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NzcGFuJTIwY2xhc3MlM0QlMjJiYXItbGFiZWwlMjIlM0UlMjAzJTIwJTNDJTJGc3BhbiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhciUyMiUzRSUzQyUyRnNwYW4lM0UlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NzcGFuJTIwY2xhc3MlM0QlMjJiYXItbnVtYmVyJTIyJTNFJTNDJTJGc3BhbiUzRSUyMCUwQSUyMCUyMCUyMCUyMCUzQyUyRmRpdiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RpdiUyMGNsYXNzJTNEJTIycmF0aW5nLWJhci1jb250YWluZXIlMjB0d28lMjIlMjBkYXRhLWlkJTNEJTIyMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1sYWJlbCUyMiUzRSUyMDIlMjAlM0MlMkZzcGFuJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3BhbiUyMGNsYXNzJTNEJTIyYmFyJTIyJTNFJTNDJTJGc3BhbiUzRSUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ3NwYW4lMjBjbGFzcyUzRCUyMmJhci1udW1iZXIlMjIlM0UlM0MlMkZzcGFuJTNFJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGl2JTNFJTBBJTIwJTIwJTIwJTIwJTNDZGl2JTIwY2xhc3MlM0QlMjJyYXRpbmctYmFyLWNvbnRhaW5lciUyMG9uZSUyMiUyMGRhdGEtaWQlM0QlMjIxJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3BhbiUyMGNsYXNzJTNEJTIyYmFyLWxhYmVsJTIyJTNFJTIwMSUyMCUzQyUyRnNwYW4lM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NzcGFuJTIwY2xhc3MlM0QlMjJiYXIlMjIlM0UlM0MlMkZzcGFuJTNFJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3BhbiUyMGNsYXNzJTNEJTIyYmFyLW51bWJlciUyMiUzRSUzQyUyRnNwYW4lM0UlMjAlMEElMjAlMjAlMjAlMjAlM0MlMkZkaXYlM0UlMEElMjAlMjAlM0MlMkZkaXYlM0UlM0MlMjEtLSUyMCUyRnJhdGluZy1oaXN0b2dyYW0lMjAtLSUzRSUwQSUwQSUwQSUyMCUyMCUzQ2RpdiUyMGNsYXNzJTNEJTIyaGlkZGVuJTIyJTNFJTNDJTIxLS0lMjBuZWVkcyUyMGZvciUyMGpxdWVyeSUyMGNhbGN1bGF0aW9ucyUyMC0tJTNFJTBBJTIwJTIwJTIwJTIwJTNDZm9ybSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ2lucHV0JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBjbGFzcyUzRCUyMnJldmlld3NfMXN0YXIlMjIlMjB2YWx1ZSUzRCUyMjUlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NpbnB1dCUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwY2xhc3MlM0QlMjJyZXZpZXdzXzJzdGFyJTIyJTIwdmFsdWUlM0QlMjI0JTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDaW5wdXQlMjB0eXBlJTNEJTIydGV4dCUyMiUyMGNsYXNzJTNEJTIycmV2aWV3c18zc3RhciUyMiUyMHZhbHVlJTNEJTIyMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ2lucHV0JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBjbGFzcyUzRCUyMnJldmlld3NfNHN0YXIlMjIlMjB2YWx1ZSUzRCUyMjYlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NpbnB1dCUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwY2xhc3MlM0QlMjJyZXZpZXdzXzVzdGFyJTIyJTIwdmFsdWUlM0QlMjIzJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZm9ybSUzRSUwQSUyMCUyMCUzQyUyRmRpdiUzRSUzQyUyMS0tJTIwJTJGaGlkZGVuJTIwLS0lM0UlMEE=[/vc_raw_html][vc_raw_js]JTBBJTIwJTIwJTBBJTNDc2NyaXB0JTNFJTBBJTIwJTIwJTIwJTIwalF1ZXJ5JTI4ZnVuY3Rpb24lMjglMjklMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjB2YXIlMjBzdGFycyUyMCUzRCUyMG5ldyUyMEFycmF5JTI4JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwdmFyJTIwc3VtJTIwJTNEJTIwMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMHZhciUyMHdpZHRoJTIwJTNEJTIwbmV3JTIwQXJyYXklMjglMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjAlMjglMjB2YXIlMjBpJTIwJTNEJTIwMSUzQiUyMGklMjAlM0MlMjA2JTNCJTIwaSUyQiUyQiUyMCUyOSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJzLnB1c2glMjhwYXJzZUludCUyOGpRdWVyeSUyOCUyNy5yZXZpZXdzXyUyNyUyQmklMkIlMjdzdGFyJTI3JTI5LnZhbCUyOCUyOSUyOSUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyMCUyMCUyMCUyMCUyMCUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMCUyOCUyMHZhciUyMGklMjAlM0QlMjAwJTNCJTIwaSUyMCUzQyUyMHN0YXJzLmxlbmd0aCUzQiUyMGklMkIlMkIlMjAlMjklMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdW0lMjAlMkIlM0QlMjBzdGFycyU1QmklNUQlM0IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjAlMjAlMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjAlMjglMjB2YXIlMjBpJTIwJTNEJTIwMCUzQiUyMGklMjAlM0MlMjBzdGFycy5sZW5ndGglM0IlMjBpJTJCJTJCJTIwJTI5JTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdyUyMCUzRCUyMCUyOCUyOHN0YXJzJTVCaSU1RCUyOSUyMCUyRiUyMHN1bSUyMCUyQSUyMDEwMCUyOS50b0ZpeGVkJTI4MCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpZHRoLnB1c2glMjh3JTI5JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwalF1ZXJ5JTI4JTI3LnJhdGluZy1iYXItY29udGFpbmVyJTVCZGF0YS1pZCUzRCUyNyUyQiUyOGklMkIxJTI5JTJCJTI3JTVEJTIwLmJhciUyNyUyOS5jc3MlMjglMjd3aWR0aCUyNyUyQyUyMHclMkIlMjclMjUlMjclMjAlMjklM0IlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMEElMjAlMjAlMjAlMjAlMjAlMjBpZiUyMCUyOHN1bSUyMCUzRSUyMDAlMjklMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjAlMjglMjB2YXIlMjBpJTIwJTNEJTIwMCUzQiUyMGklMjAlM0MlMjBzdGFycy5sZW5ndGglM0IlMjBpJTJCJTJCJTIwJTI5JTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwalF1ZXJ5JTI4JTI3LnJhdGluZy1iYXItY29udGFpbmVyJTVCZGF0YS1pZCUzRCUyNyUyQiUyOGklMkIxJTI5JTJCJTI3JTVEJTIwLmJhci1udW1iZXIlMjclMjkuaHRtbCUyOHdpZHRoJTVCaSU1RCUyQiUyNyUyNSUyNyUyOSUzQiUyMCUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyMGVsc2UlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBqUXVlcnklMjglMjIucmF0aW5nLWJhci1jb250YWluZXIlMjAuYmFyLW51bWJlciUyMiUyOS5odG1sJTI4JTI3MCUyNSUyNyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCU3RCUyOSUzQiUwQSUyMCUyMCUzQyUyRnNjcmlwdCUzRSUwQQ==[/vc_raw_js][vc_raw_html]JTNDc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAucmF0aW5nLWhpc3RvZ3JhbSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMHBhZGRpbmclM0ElMjA1cHglMjA1cHglMjA1cHglMjA0NHB4JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwdGV4dC1hbGlnbiUzQSUyMGxlZnQlM0IlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjB3aWR0aCUzQSUyMDEwMCUyNSUzQiUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMC5yYXRpbmctaGlzdG9ncmFtJTIwLnJhdGluZy1iYXItY29udGFpbmVyJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwcG9zaXRpb24lM0ElMjByZWxhdGl2ZSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMG1hcmdpbi1ib3R0b20lM0ElMjA1cHglM0IlMjAlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAucmF0aW5nLWhpc3RvZ3JhbSUyMC5iYXItbGFiZWwlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjBtYXJnaW4tcmlnaHQlM0ElMjAxMHB4JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwcG9zaXRpb24lM0ElMjBhYnNvbHV0ZSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGxlZnQlM0ElMjAtNDRweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMHRvcCUzQSUyMDJweCUzQiUyMCUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMC5yYXRpbmctaGlzdG9ncmFtJTIwLmJhci1sYWJlbCUzQWJlZm9yZSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGNvbnRlbnQlM0ElMjAlMjIlNUNmMDA1JTIyJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwZm9udC1mYW1pbHklM0ElMjBGb250QXdlc29tZSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGZvbnQtc2l6ZSUzQSUyMDE2cHglM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBsaW5lLWhlaWdodCUzQSUyMDE2cHglM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBoZWlnaHQlM0ElMjAxNnB4JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwd2lkdGglM0ElMjAxNnB4JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwY29sb3IlM0ElMjAlMjNjY2MlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBkaXNwbGF5JTNBJTIwaW5saW5lLWJsb2NrJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwbWFyZ2luLXJpZ2h0JTNBJTIwNXB4JTNCJTIwJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwLnJhdGluZy1oaXN0b2dyYW0lMjAuYmFyJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwYmFja2dyb3VuZC1jb2xvciUzQSUyMCUyMzhlNzBhZiUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMGJhY2tncm91bmQtaW1hZ2UlM0ElMjAtd2Via2l0LWxpbmVhci1ncmFkaWVudCUyOGxlZnQlMkMlMjAlMjM4ZTcwYWYlMkMlMjAlMjM0OGJmZWQlMjklM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBiYWNrZ3JvdW5kLWltYWdlJTNBJTIwbGluZWFyLWdyYWRpZW50JTI4dG8lMjByaWdodCUyQyUyMzhlNzBhZiUyQyUyMCUyMzQ4YmZlZCUyOSUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMC13ZWJraXQtdHJhbnNpdGlvbiUzQSUyMHdpZHRoJTIwMnMlMjBlYXNlJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwLW1vei10cmFuc2l0aW9uJTNBJTIwd2lkdGglMjAycyUyMGVhc2UlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjB0cmFuc2l0aW9uJTNBJTIwd2lkdGglMjAycyUyMGVhc2UlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBvcGFjaXR5JTNBJTIwLjglM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBkaXNwbGF5JTNBJTIwaW5saW5lLWJsb2NrJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwdmVydGljYWwtYWxpZ24lM0ElMjBtaWRkbGUlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjB3aWR0aCUzQSUyMDElMjUlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBoZWlnaHQlM0ElMjAxNXB4JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwbWFyZ2luLXJpZ2h0JTNBJTIwM3B4JTNCJTIwJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwLnJhdGluZy1oaXN0b2dyYW0lMjAuYmFyLW51bWJlciUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGZvbnQtc2l6ZSUzQSUyMDE0cHglM0IlMEElMjAlMjAlMjAlMjAlMjAlMjBsaW5lLWhlaWdodCUzQSUyMDElM0IlMEElMjAlMjAlMjAlMjAlMjAlMjB2ZXJ0aWNhbC1hbGlnbiUzQSUyMG1pZGRsZSUzQiUyMCUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMC5oaWRkZW4lN0IlMEElMjAlMjAlMjAlMjAlMjAlMjBkaXNwbGF5JTNBJTIwbm9uZSUzQiUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUzQyUyRnN0eWxlJTNFJTBB[/vc_raw_html][/vc_column][/vc_row]
Вариант 1 — Простой JS
Используем такой html:
<div class="rating-histogram">
<div class="rating-bar-container five">
<span class="bar-label"> 5 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container four">
<span class="bar-label"> 4 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container three">
<span class="bar-label"> 3 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container two">
<span class="bar-label"> 2 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container one">
<span class="bar-label"> 1 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
</div><!-- /rating-histogram -->
<div class="hidden"><!-- needs for jquery calculations -->
<form>
<input type="text" class="reviews_1star" value="5">
<input type="text" class="reviews_2star" value="4">
<input type="text" class="reviews_3star" value="2">
<input type="text" class="reviews_4star" value="6">
<input type="text" class="reviews_5star" value="3">
</form>
</div><!-- /hidden -->
В блоке div.hidden мы выводим количество голосов за каждую оценку, например,
1 балл — 5 голосов,
2 балла — 4 голоса,
3 балла — 2 голоса,
4 балла — 6 голосов,
5 баллов — 3 голоса.
Для WordPress мы можем эти оценки выводить через кастомные поля <?php the_field('reviews_1star'); ?> и т.д., а в HTML это могут быть статические данные, но они обязательно должны быть, потому что используются для подсчета и построения гистограммы.
Используем такой JS:
<script>
$(function() {
var reviews_1star = parseInt($('.reviews_1star').val());
var reviews_2star = parseInt($('.reviews_2star').val());
var reviews_3star = parseInt($('.reviews_3star').val());
var reviews_4star = parseInt($('.reviews_4star').val());
var reviews_5star = parseInt($('.reviews_5star').val());
var sum = reviews_1star + reviews_2star + reviews_3star + reviews_4star + reviews_5star;
var width_1star = (reviews_1star / sum * 100).toFixed(0);
var width_2star = (reviews_2star / sum * 100).toFixed(0);
var width_3star = (reviews_3star / sum * 100).toFixed(0);
var width_4star = (reviews_4star / sum * 100).toFixed(0);
var width_5star = (reviews_5star / sum * 100).toFixed(0);
$('.rating-bar-container.one .bar').css('width', width_1star+'%' );
$('.rating-bar-container.two .bar').css('width', width_2star+'%' )
$('.rating-bar-container.three .bar').css('width', width_3star+'%' );
$('.rating-bar-container.four .bar').css('width', width_4star+'%' );
$('.rating-bar-container.five .bar').css('width', width_5star+'%' );
if (sum > 0) {
$(".rating-bar-container.one .bar-number").html(width_1star+'%');
$(".rating-bar-container.two .bar-number").html(width_2star+'%');
$(".rating-bar-container.three .bar-number").html(width_3star+'%');
$(".rating-bar-container.four .bar-number").html(width_4star+'%');
$(".rating-bar-container.five .bar-number").html(width_5star+'%');
} else{
$(".rating-bar-container .bar-number").html('0%')
}
});
</script>
В head подключаем jquery, если он не подключен:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Используем Такой CSS:
<style>
.rating-histogram {
padding: 5px 5px 5px 44px;
text-align: left;
width: 100%;
}
.rating-histogram .rating-bar-container {
position: relative;
margin-bottom: 5px;
}
.rating-histogram .bar-label {
margin-right: 10px;
position: absolute;
left: -44px;
top: 2px;
}
.rating-histogram .bar-label:before {
content: "\f005";
font-family: FontAwesome;
font-size: 16px;
line-height: 16px;
height: 16px;
width: 16px;
color: #ccc;
display: inline-block;
margin-right: 5px;
}
.rating-histogram .bar {
background-color: #8e70af;
background-image: -webkit-linear-gradient(left, #8e70af, #48bfed);
background-image: linear-gradient(to right,#8e70af, #48bfed);
-webkit-transition: width 2s ease;
-moz-transition: width 2s ease;
transition: width 2s ease;
opacity: .8;
display: inline-block;
vertical-align: middle;
width: 1%;
height: 15px;
margin-right: 3px;
}
.rating-histogram .bar-number {
font-size: 14px;
line-height: 1;
vertical-align: middle;
}
.hidden{
display: none;
}
</style>
В CSS используется шрифт иконок FontAwesome, он у вас должен быть подключен.
Вариант 2 — Более профессиональный, оптимизирован JS
Меняем HTML на такой формат:
<div class="rating-histogram">
<div class="rating-bar-container five" data-id="5">
<span class="bar-label"> 5 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container four" data-id="4">
<span class="bar-label"> 4 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container three" data-id="3">
<span class="bar-label"> 3 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container two" data-id="2">
<span class="bar-label"> 2 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
<div class="rating-bar-container one" data-id="1">
<span class="bar-label"> 1 </span>
<span class="bar"></span>
<span class="bar-number"></span>
</div>
</div><!-- /rating-histogram -->
<div class="hidden"><!-- needs for jquery calculations -->
<form>
<input type="text" class="reviews_1star" value="5">
<input type="text" class="reviews_2star" value="4">
<input type="text" class="reviews_3star" value="2">
<input type="text" class="reviews_4star" value="6">
<input type="text" class="reviews_5star" value="3">
</form>
</div><!-- /hidden -->
Добавился только параметр data-id для div.rating-bar-container
А JS меняем на такой оптимизированный код:
<script>
$(function() {
var stars = new Array();
var sum = 0;
var width = new Array();
for ( var i = 1; i < 6; i++ ) {
stars.push(parseInt($('.reviews_'+i+'star').val()));
}
for ( var i = 0; i < stars.length; i++ ) {
sum += stars[i];
}
for ( var i = 0; i < stars.length; i++ ) {
w = ((stars[i]) / sum * 100).toFixed(0);
width.push(w);
$('.rating-bar-container[data-id='+(i+1)+'] .bar').css('width', w+'%' );
}
if (sum > 0) {
for ( var i = 0; i < stars.length; i++ ) {
$('.rating-bar-container[data-id='+(i+1)+'] .bar-number').html(width[i]+'%');
}
} else{
$(".rating-bar-container .bar-number").html('0%')
}
});
</script>
CSS остается прежним.
Код на CodePen
See the Pen Animated Rating Histogram by Denis (@deniscreative) on CodePen.
За помощь спасибо Algiz.
Для того, чтобы не прописывать градиенты с вендорными префиксами для каждого элемента, достаточно использовать миксины…
Цель — сделать pop-up окно без использования Fancybox. В общем, его можно сделать даже без…
Суть задачи: На сайте есть несколько вариантов фоновой картинки и несколько вариантов блока модального окна…
Пример реализации красивого чекбокса вместо стандартного. Это простой пример, а визуально оформить сам чекбокс каждый…