Это хороший вопрос, и есть два пути ее решения:
1) Создать Blob url и передать данные svg и передать URL-адрес в значение свойства (поддерживается только в некоторых браузерах)
2) Используйте URL-адрес данных, но есть уловка - если вы не укажете размеры, то курсор выиграл ' t, поскольку браузер не знает, какого размера это сделать. Кроме того, вам нужно добавить теги xmlns
, или браузер все равно не отобразит их.
Обратите внимание, что я использовал строки ES6 для краткости, но если вы не используете транспилятор/хотите поддерживать старые браузеры, тогда измените на конкатенацию строк.
function svgUrl(svgString, width, height, viewBoxWidth, viewBoxHeight) {
viewBoxWidth = viewBoxWidth || width;
viewBoxHeight = viewBoxHeight || width;
return `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="${width}" height="${height}" viewBox="0 0 ${viewBoxWidth} ${viewBoxHeight}">${svgString}</svg>')`;
}
$('html').css('cursor', `${svgUrl('<circle cx="100" cy="100" r="100"/>', 100, 100, 200, 200)}, auto`);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
PS Вы можете также использовать строку base64, если вы беспокоитесь о недопустимых символах в данной SVG:
function svgToBase64Url(svgString, width, height) {
const base64SVG = btoa(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="${width}px" height="${height}px">${svgString}</svg>`);
return `url('data:image/svg+xml;base64,${base64SVG}')`;
}
Я не знаю, если это будет работать, но ваш код jQuery недействителен. Вам нужно передать 2 параметра функции 'css'. Попробуйте '' $ («html»). Css («курсор», «url (''), auto"); ' –
Это не URL-адрес, который вы предоставляете. Вам нужно указать внешний файл svg или URL-адрес данных (частью которого будут данные, которые у вас уже есть). Обратите внимание, что вашим данным не хватает пространства имен SVG, и это –