<script src="https://cdn.jsdelivr.net/npm/hanzi-writer@3.0/dist/hanzi-writer.min.js"></script>
hanziwriter.org/cn/docs.htm…

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>生成笔顺</title>
<script src="hanzi-writer.min.js"></script>
</head>
<body style="display: flex; flex-wrap: wrap">
<div class="bishun_a"></div>
<div id="character-1"></div>
<div id="character-2"></div>
<div id="character-3"></div>
<div id="character-4"></div>
<div id="character-5"></div>
<div id="character-6"></div>
<div id="character-7"></div>
<div id="character-8"></div>
<div id="character-9"></div>
<div id="character-10"></div>
<div id="character-11"></div>
<div id="character-12"></div>
<div id="character-13"></div>
<div id="character-14"></div>
<div id="character-15"></div>
<button id="animate-button">动画</button>
<div id="character-target-1"></div>
<div id="character-target-2"></div>
<div id="target-an"></div>
<div id="target-shi"></div>
<button id="animate-button-2">动画</button>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" id="grid-background-target" style="margin: 20px">
<line x1="0" y1="0" x2="100" y2="100" stroke="#DDD" />
<line x1="100" y1="0" x2="0" y2="100" stroke="#DDD" />
<line x1="50" y1="0" x2="50" y2="100" stroke="#DDD" />
<line x1="0" y1="50" x2="100" y2="50" stroke="#DDD" />
</svg>
</body>
<script>
var writer = HanziWriter.create('character-1', '王', {
width: 100,
height: 100,
padding: 5,
})
var writer = HanziWriter.create('character-2', '健', {
width: 150,
height: 150,
padding: 20,
strokeColor: '#EE00FF',
})
var writer = HanziWriter.create('character-3', '康', {
width: 150,
height: 150,
padding: 5,
radicalColor: '#168F16',
})
document.getElementById('animate-button').addEventListener('click', function () {
writer.animateCharacter()
})
var writer = HanziWriter.create('character-4', '激', {
width: 100,
height: 100,
padding: 5,
showOutline: false,
strokeAnimationSpeed: 5,
delayBetweenStrokes: 10,
radicalColor: '#337ab7',
})
document.getElementById('animate-button').addEventListener('click', function () {
writer.animateCharacter()
})
writer.loopCharacterAnimation()
var char1 = HanziWriter.create('character-target-1', '恒', {
width: 100,
height: 100,
padding: 5,
showCharacter: false,
})
var char2 = HanziWriter.create('character-target-2', '天', {
width: 100,
height: 100,
padding: 5,
showCharacter: false,
})
function chainAnimations() {
var delayBetweenAnimations = 1000
char1.hideCharacter()
char2.hideCharacter()
char1.animateCharacter({
onComplete: function () {
setTimeout(function () {
char2.animateCharacter()
}, delayBetweenAnimations)
},
})
}
document.getElementById('animate-button-2').addEventListener('click', chainAnimations)
var writer5 = HanziWriter.create('character-5', '测', {
width: 150,
height: 150,
showCharacter: false,
padding: 5,
})
writer5.quiz()
var writer6 = HanziWriter.create('character-6', '鬼', {
width: 150,
height: 150,
showCharacter: false,
showOutline: false,
showHintAfterMisses: 1,
highlightOnComplete: false,
padding: 5,
})
writer6.quiz()
var writer7 = HanziWriter.create('character-7', '码', {
width: 150,
height: 150,
showCharacter: false,
padding: 5,
})
writer7.quiz({
onMistake: function (strokeData) {
console.log('Oh no! you made a mistake on stroke ' + strokeData.strokeNum)
console.log("You've made " + strokeData.mistakesOnStroke + ' mistakes on this stroke so far')
console.log("You've made " + strokeData.totalMistakes + ' total mistakes on this quiz')
console.log('There are ' + strokeData.strokesRemaining + ' strokes remaining in this character')
},
onCorrectStroke: function (strokeData) {
console.log('Yes!!! You got stroke ' + strokeData.strokeNum + ' correct!')
console.log('You made ' + strokeData.mistakesOnStroke + ' mistakes on this stroke')
console.log("You've made " + strokeData.totalMistakes + ' total mistakes on this quiz')
console.log('There are ' + strokeData.strokesRemaining + ' strokes remaining in this character')
},
onComplete: function (summaryData) {
console.log('You did it! You finished drawing ' + summaryData.character)
console.log('You made ' + summaryData.totalMistakes + ' total mistakes on this quiz')
},
})
let row = {
characterName: '迪',
characterId: 'a',
}
let preBh = '#cccdf5'
let curBh = '#420f8e'
HanziWriter.loadCharacterData(row.characterName).then(function (charData) {
document.getElementsByClassName('bishun_' + row.characterId)[0].innerHTML = ''
var target = document.getElementsByClassName('bishun_' + row.characterId)[0]
for (var i = 0; i < charData.strokes.length; i++) {
var strokes = charData.strokes.slice(0, i + 1)
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
svg.style.width = '60px'
svg.style.height = '60px'
svg.style.marginRight = '3px'
target.appendChild(svg)
var group = document.createElementNS('http://www.w3.org/2000/svg', 'g')
var transformData = HanziWriter.getScalingTransform(60, 60)
group.setAttributeNS(null, 'transform', transformData.transform)
svg.appendChild(group)
strokes.forEach(function (strokePath, index) {
var path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
path.setAttributeNS(null, 'd', strokePath)
if (index == strokes.length - 1) {
path.style.fill = curBh
} else {
path.style.fill = preBh
}
group.appendChild(path)
})
}
})
HanziWriter.loadCharacterData('安').then(function (charData) {
var target = document.getElementById('target-an')
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
svg.style.width = '150px'
svg.style.height = '150px'
target.appendChild(svg)
var group = document.createElementNS('http://www.w3.org/2000/svg', 'g')
var transformData = HanziWriter.getScalingTransform(150, 150)
group.setAttributeNS(null, 'transform', transformData.transform)
svg.appendChild(group)
charData.strokes.forEach(function (strokePath) {
var path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
path.setAttributeNS(null, 'd', strokePath)
path.style.fill = curBh
group.appendChild(path)
})
})
function renderFanningStrokes(target, strokes) {
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
svg.style.width = '75px'
svg.style.height = '75px'
svg.style.border = '1px solid #EEE'
svg.style.marginRight = '3px'
target.appendChild(svg)
var group = document.createElementNS('http://www.w3.org/2000/svg', 'g')
var transformData = HanziWriter.getScalingTransform(75, 75)
group.setAttributeNS(null, 'transform', transformData.transform)
svg.appendChild(group)
strokes.forEach(function (strokePath) {
var path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
path.setAttributeNS(null, 'd', strokePath)
path.style.fill = '#555'
group.appendChild(path)
})
}
HanziWriter.loadCharacterData('是').then(function (charData) {
var target = document.getElementById('target-shi')
for (var i = 0; i < charData.strokes.length; i++) {
var strokesPortion = charData.strokes.slice(0, i + 1)
renderFanningStrokes(target, strokesPortion)
}
})
var writer = HanziWriter.create('grid-background-target', '酷', {
width: 100,
height: 100,
padding: 5,
})
</script>
</html>